2013-06-20 2 views
2

Гниль - это четыре бита. Это означает, что существует 16 (2^4) возможных значений. Это означает, что полубайт соответствует одной шестнадцатеричной цифре, так как hex является базой 16. Байт равен 2^8, поэтому он может быть представлен двумя шестнадцатеричными цифрами и, следовательно, двумя полубайтами.Рубиновый пакет и шестнадцатеричные значения

Так вот ниже я 1 байт персонажу:

'A'

Это символ 2^8:

'A'.unpack('B*') 
=> ["01000001"] 

Это означает, что оно должно быть представлено двумя шестнадцатеричных цифр:

01000001 == 41 

В соответствии с документацией Ruby для пакета метода Array, когда aTemplateString (параметр) равен «H», то он вернет шестнадцатеричную строку. Но это то, что я вернусь:

['A'].pack('H') 
=> "\xA0" 

Мой первый пункт - это не шестнадцатеричное значение, которое оно должно вернуть. Он должен был вернуть шестнадцатеричное значение 41. Вторая точка - это понятие полубайта, как я объяснял выше, средство для 1 байта, оно должно возвращать два куска. Но над ним вставляет 0, потому что он считает, что входной сигнал имеет только 1 кусок, хотя «A» - один байт и имеет два куска. Так ясно, что я что-то упустил.

+1

Вы ищете '' A'.unpack ('H *') # => ["41"] '? – Stefan

+0

@Stefan у вас есть высокий rep, так что вы можете добавить тег 'pack' и' unpack' тоже? –

ответ

5

Я думаю, что вы хотите unpack:

'A'.unpack('H*') #=> ["41"] 

pack делает обратное:

['41'].pack('H*') #=> "A" 
+1

Это 2 метода из класса String, которые я до сих пор не могу понять :( –

+0

@Stefan Я хотел бы знать, откуда этот «\ xA0». A0 - это не шестнадцатеричное значение «A». Что это такое? почему он вставляет 0, когда «A» - это два куска? – JohnMerlino

+0

'['A']. pack ('H')' создает символ с шестнадцатеричным кодом '0xA0', который находится за пределами диапазона ASCII, так же как' [' 41 ']. Pack (' H * ') 'создает символ с шестнадцатеричным кодом' 0x41', который представляется как 'A'. – Stefan

0

Это сложно. ["1"]. Pack ("H") => "\ x10" и ["16"]. Pack ("H") => "\ x10". Я долго проработал, чтобы понять это.