C # - конвертировать Int в Hex 4 байта - PullRequest
2 голосов
/ 05 ноября 2019

Я хочу преобразовать int в шестнадцатеричные 4 байта.

Я использую это:

int a = 50;
a.ToString("X8");

Это возвращает «00000032».

Но я хочу вернуть"0x00, 0x00, 0x00, 0x32".

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Это область, где вы должны быть очень осторожны с «порядком байтов»;в большинстве простых сценариев лучше всего использовать сменные операции, например

static void Main()
{
    static string ByteHex(int value) => (value & 0xFF).ToString("X2");
    int a = 50;
    Console.WriteLine("0x" + ByteHex(a >> 24));
    Console.WriteLine("0x" + ByteHex(a >> 16));
    Console.WriteLine("0x" + ByteHex(a >> 8));
    Console.WriteLine("0x" + ByteHex(a));
}

В более нюансированных случаях есть тип new-ish BinaryPrimitives, который является вашим другом:

int a = 50;
Span<byte> span = stackalloc byte[4];
BinaryPrimitives.WriteInt32BigEndian(span, a);
// now access span[0] - span[3]

Обычно это предпочтительнее, чем BitConverter, который a: является тяжелым при распределении, а b: неуклюжим обратным порядком байтов (вам нужно включить BitConverter.IsLittleEndian)

1 голос
/ 05 ноября 2019

Это должно сделать работу:

int a = 50;

string result = string.Join(", ", BitConverter.GetBytes(a).Reverse().Select(b => "0x" + b.ToString("X2")));

Console.WriteLine(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...