BitConverter VS ToString для Hex - PullRequest
4 голосов
/ 24 мая 2011

Просто интересно, может кто-нибудь объяснить, почему две следующие строки кода возвращают «разные» результаты? Что вызывает обратные значения? Это как-то связано с порядком байтов?

int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F

Ответы [ 2 ]

13 голосов
/ 24 мая 2011

int.MaxValue.ToString("X") выводит 7FFFFFFF, то есть число 2147483647 в целом .

С другой стороны, BitConverter.GetBytes возвращает массив байтов, представляющих 2147483647 в памяти. На вашей машине это число хранится в порядке с прямым порядком байтов (последний старший байт). И BitConverter.ToString работает отдельно для каждого байта, поэтому не переупорядочивает вывод, чтобы дать то же самое, что и выше, тем самым сохраняя порядок памяти.

Однако эти два значения одинаковы: 7F-FF-FF-FF для int.MaxValue в старшем порядке и FF-FF-FF-7F для BitConverter для младшего порядка. Тот же номер.

0 голосов
/ 24 мая 2011

Я бы предположил, потому что GetBytes возвращает массив байтов, который BitConverter.ToString отформатирован - на мой взгляд - довольно приятно

И также имейте в виду, что побитовое представление может отличаться от значения!Это зависит от того, где находится самый значимый байт!

hth

...