шестнадцатеричное значение - PullRequest
1 голос
/ 01 сентября 2010
return jjMoveStringLiteralDfa1_0(0x140L, 0x4000000000000L);

Я пытаюсь преобразовать 0x4000000000000L гекса в двоичный файл и текст, но я получаю странные символы.Это шестнадцатеричное значение?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

0x4000000000000 - это шестнадцатеричное число, буква L в конце говорит вам, что это целое число long (в данном случае я предполагаю 8-байтовое целое число).

1 голос
/ 01 сентября 2010

Префикс 0x является стандартным для нескольких языков. Обозначает начало шестнадцатеричного числа. Суффикс L обозначает длинное значение на нескольких языках (например, C).

Если вы перегруппируете его, легче увидеть его значение:

   4 0000 0000 0000

, что эквивалентно:

0004 0000 0000 0000

Каждая группа имеет два байта, поэтому общая длина составляет восемь байтов.

Два старших байта (те, что слева): 00 и 04, что в двоичном виде 0000 0000 0000 0100. Другими словами, значение имеет только 51-й установленный бит (отсчитывается справа, так называемый младший бит), все остальные биты очищаются. Похоже, немного маски (флаг). Для полноты вот двоичное представление:

0000 0000 0000 0100  0000 0000 0000 0000  0000 0000 0000 0000  0000 0000 0000 0000

Каждая группа, разделенная пробелом, является полубайтом, каждые четыре группы равны двум байтам.

Таким образом, число является вполне допустимым 64-битным значением. Но, может быть, вы путаете значение с представлением символа? Поскольку это, конечно, не так, то это будет за пределами диапазона Юникода (который достигает 0x10FFF IIRC).

Кстати, число, преобразованное в десятичное число, составляет 1.125.899.906.842.620, и все это должен показывать приличный калькулятор (например, калькулятор Apple в Mac OS X хорошо работает, когда установлен в режим программирования) .

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