3

4 桁の 16 進数値に変換する必要がある整数があります。

たとえば、int 値が 16 だとします。私が探しているのは、16 から 0x00 0x10 に移動する方法です。

どんな提案でも大歓迎です!!!

4

4 に答える 4

2

これを試して:

var input = 16;

var bytes = new byte[2];
bytes[0] = (byte)(input >> 8);  // 0x00
bytes[1] = (byte)input;         // 0x10

var result = (bytes[0] << 8)
           | bytes[1];

// result == 16
于 2012-08-11T15:02:52.607 に答える
1

楽しみのために、正規表現を使用したものを次に示します。

Regex.Replace(number.ToString("X4"), "..", "0x$0 ").TrimEnd();
于 2012-08-11T15:08:23.410 に答える
0

それをシフト!マスクして!マスクして!string.Formatそれ!

int n = 16;
string.Format("0x{0:x2} 0x{1:x2}", (n & 0xff00) >> 8, n & 0xff); // 0x00 0x10

これがデモです。

フォーマット指定子は、2 桁のx216 進数値を意味します。


わかりました、明らかに 2 バイトだけが必要です。ここでは 16 進数は関係ありません。

byte lowByte = (byte)(n & 0xff);
byte highByte = (byte)(n >> 8 & 0xff);
于 2012-08-11T14:55:06.563 に答える
0

または、もう少し一般的な解決策は、バイト配列で行うことです (これを文字列または他のデータ型に使用できます)。

public static string ByteArrayToString(byte[] ba)
{
   string hex = BitConverter.ToString(ba);
   return hex.Replace("-","");
}

int i = 39;
string str = "ssifm";
long l = 93823;

string hexi = ByteArrayToString(BitConverter.GetBytes(i));
string hexstr = ByteArrayToString(Encoding.Ascii.GetBytes(str));
string hexl = ByteArrayToString(BitConverter.GetBytes(l));

これはそれらを「FF」形式で返します。代わりに、ToString() の後にこれを追加することで「0x」を自分で追加できます。

return "0x"+hex.Replace("-", " 0x");
于 2012-08-11T14:59:44.017 に答える