1

私は自作のプログラマーなので、ビットとバイト、および 16 進数値についてはあまり知りません。

私が使用するライブラリの 1 つは、リモート サービスからデータをバイト配列として受け取ります。このバイト配列データを変換する方法を見つけました。

public string ByteArrayToHexString(byte[] buf)
{
    if (buf == null) return "";

    StringBuilder sb = new StringBuilder(buf.Length * 2 + 2);

    for (int i = 0; i < buf.Length; i++)
    {
        sb.Append(buf[i].ToString("x2"));
    }

    return sb.ToString();
}

このメソッドを使用すると、次のような文字列が得られます。

0031

また

0022

また

002d

それらの実際の値はサービスによって送信されたものですか、それともさらに変換が必要ですか? 実際の値を取得するにはどうすればよいですか?

4

2 に答える 2

2

あなたのバイト値が何を意味するか、またはそれらが「正しい」かどうかについての質問には答えようとしません。代わりに、「これらの実際の値はサービスによって送信されますか?」という質問に答えるために、変換について順を追って説明します。

Abyte[]はバイトの配列 - 「バイト配列」です。

配列は、固定サイズの値のセットです。

C#のbyteオブジェクトは、範囲が 10 進数 0 から 255 の間の値です。

したがって、「バイト配列」は文字どおり、順番に並べられた数字の集まりであり、そのすべてが 0 から 255 の間です。

16 進値は、バイト配列を視覚化する 1 つの方法にすぎません。

(完全に明確にするために、16 進数は 16 進数、10 進数は 10 進数です。)

以下の列の数字は同等です。

decimal    0     5    10    15    16    20     26     255
decimal    0    05    10    15    16    20     26     255  (padded with zero)
hex        0     5     a     f    10    14     1A      FF
hex        0    05    0a    0f    10    14     1A      FF  (padded with zero)

したがって、次の 10 進数値を持つバイト配列を想像してください。

4, 12, 255, 1, 0

これは、次の 16 進値を持つバイトの配列に相当します。

4, c, ff, 1, 0

それは次のようにも書けます:

04, 0c, ff, 01, 00

またはより一般的に:

0x04, 0x0c, 0xff, 0x01, 0x00

また:

04 0c ff 01 00

また:

040cff0100

したがって、サービスがバイト配列を返し、 のような値が表示されている場合002d、つまり、2 バイトを受信したことを意味します。最初のバイトは 0 (0 は基数 10 と基数 16 で同じ)、2 番目のバイトは 2d (16 進数) です。 10 進数で 45 と表すこともできます (基数 10)。

簡単な回答ですが、あなたが私たちに何も言わなかったとしても、はい、これらの 16 進値はサービスから受け取った実際の値を表しています。

于 2012-09-19T13:34:42.210 に答える
1

バイト配列を 16 進文字列に変換するには、おそらく組み込みBitConvertor.ToString(byte[])メソッドを使用する方がよいでしょう。

ただし、Web メソッドによって返される実際の値の型はbyte[]です。それを 16 進文字列に変換することは、それを表すもう 1 つの方法です。

10 進数のバイト値のコンマ区切りリストとして表示する方が便利な場合があります。

byte[] returnValue = ...
var commaDelimmitedListOfByteValues =
    string.Join(",", returnValue.Select(v => c.ToString()));

これにより、次のような結果が得られます"1,254,23,67,111,23,..."

byte[]が何から返されたのか、またその理由を知らずに、 の「真の」意味を推測することはできません。


この文脈では、価値があるもののために


    "0031"           //Your Hex String
    "00-31"          //BitConvertor Hex String
    { 0, 49 }        //Array Inline Initializer
    "0,49"           //Comma delimited list of decimal byte values
    49               //Possible conversion to an Int32
    '1'              //Possible conversion to a Char

これらはすべて、戻り値の有効な表現である可能性があります。


それはありますか?

「0031」=「1

"0022" = ' " '

"002d" = ' - '

すべては憶測です。

于 2012-09-19T13:48:01.153 に答える