Количество байтов в закодированной шестнадцатеричной строке - PullRequest
1 голос
/ 12 декабря 2011

Это, вероятно, простой вопрос, но я пытаюсь просмотреть кодировки и байты (которые я давно не рассматривал) для реализации двоичного протокола.

Похоже, что нормальные символы1 байтНо когда вы кодируете их в шестнадцатеричном формате, это уменьшает вдвое количество байтов.

ruby-1.9.2-p180 :001 > "abcd".bytesize
 => 4 
ruby-1.9.2-p180 :002 > ["abcd"].pack("H*")
 => "\xAB\xCD" 
ruby-1.9.2-p180 :003 > ["abcd"].pack("H*").bytesize
 => 2 

Я также ожидал, что шестнадцатеричное кодирование получит символы 0-9 и AF

Может кто-нибудь помочьуточнить, что здесь происходит?А также, если вы можете указать мне на хороший обзор кодировок в целом, который есть в сети, я бы с удовольствием обновился.Я еще не видел ни одного простого обзора этого, что было бы здорово.

Спасибо!

1 Ответ

3 голосов
/ 12 декабря 2011

#pack читает данную строку и преобразует ее в двоичный файл в соответствии с заданным форматом. pack('H*') означает, что указанная вами строка представляет шестнадцатеричное представление, поэтому она преобразует байты AB и CD из шестнадцатеричного числа в двоичный (1010 1011 1100 1101), то есть два байта.

Попробуйте ["g"].pack("H*"), где g не является допустимым шестнадцатеричным символом ...

...