4

を に変換し、byte arrayこれをstringに変換します。これら 2 つのバイト配列は異なります。stringbyte array

以下のように:

byte[] tmp = Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(b));

b がバイト配列であるとします。

b[0]=3, b[1]=188, b[2]=2 //10 進法

結果:

tmp[0]=3、tmp[1]=63、tmp[2]=2

それが私の問題です、それの何が問題なのですか?

4

6 に答える 6

5

188はASCIIの範囲外です。対応する文字セットに含まれていない文字は、「?」に置き換えられます。設計による(「1/4」への転置を希望しますか?)

于 2012-11-06T08:59:29.040 に答える
4

ASCII は 7 ビットのみなので、その他は無効です。デフォルトでは?、無効なバイトを置き換えるために使用されるため、?.

8 ビット文字セットの場合は、拡張 ASCII (後で「ISO 8859-1」と定義されます) またはコード ページ 437 (拡張 ASCIIと混同されることがよくありますが、実際には違います)のいずれかを探す必要があります。

次のコードを使用できます。

Encoding enc = Encoding.GetEncoding("iso-8859-1");
// For CP437, use Encoding.GetEncoding(437)
byte[] tmp = enc.GetBytes(enc.GetString(b));
于 2012-11-06T09:08:48.317 に答える
1

文字188はASCII用に定義されていません。代わりに、63疑問符であるを取得しています。

于 2012-11-06T08:59:34.350 に答える
1

ASCII文字セットの範囲は1〜127です。188はこの範囲になく、?に変換されていることがわかります。(= ASC 63)。

于 2012-11-06T09:00:35.817 に答える
1

すべてのバイトシーケンスが、特定のエンコードに対してエンコードされた値の有効なシーケンスである必要はありません。

したがって、バイトEncoding.ASCII.GetString(b)任意の配列での結果はb、十分に定義されていません。(そして、他のエンコーディングについてもそうかもしれません)。

任意のバイト配列を取得して文字のシーケンスを取得する必要がある場合は、ConvertクラスToBase64Stringとを調べることをお勧めしますFromBase64String。それがあなたがやろうとしていることではない場合は、おそらく元の問題を私たちに説明してください。

于 2012-11-06T09:01:17.703 に答える
0

188は ASCII (7 ビット) の範囲にないEncoding.Defaultため、ANSI エンコーディングを取得するために使用する必要があります。

byte[] b = new byte[3]{ 3, 188, 2 };
byte[] tmp = Encoding.Default.GetBytes(Encoding.Default.GetString(b));
于 2012-11-06T09:10:13.107 に答える