Гниль - это четыре бита. Это означает, что существует 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» - один байт и имеет два куска. Так ясно, что я что-то упустил.
Вы ищете '' A'.unpack ('H *') # => ["41"] '? – Stefan
@Stefan у вас есть высокий rep, так что вы можете добавить тег 'pack' и' unpack' тоже? –