4 桁の 16 進数値に変換する必要がある整数があります。
たとえば、int 値が 16 だとします。私が探しているのは、16 から 0x00 0x10 に移動する方法です。
どんな提案でも大歓迎です!!!
これを試して:
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
楽しみのために、正規表現を使用したものを次に示します。
Regex.Replace(number.ToString("X4"), "..", "0x$0 ").TrimEnd();
それをシフト!マスクして!マスクして!string.Format
それ!
int n = 16;
string.Format("0x{0:x2} 0x{1:x2}", (n & 0xff00) >> 8, n & 0xff); // 0x00 0x10
フォーマット指定子は、2 桁のx2
16 進数値を意味します。
わかりました、明らかに 2 バイトだけが必要です。ここでは 16 進数は関係ありません。
byte lowByte = (byte)(n & 0xff);
byte highByte = (byte)(n >> 8 & 0xff);
または、もう少し一般的な解決策は、バイト配列で行うことです (これを文字列または他のデータ型に使用できます)。
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");