2016-11-21 7 views
0

Из документов, unpack делает:Ruby: Что делает распаковка («C») на самом деле?

Декодирование Str (который может содержать двоичные данные) в соответствии с форматом строки , возвращая массив каждого значения извлечены.

И "C" формат означает 8-bit unsigned (unsigned char).

Но что это на самом деле заканчивается тем, что я вводил? Что означает результат, и если бы мне пришлось делать это вручную, как бы я это сделал?

ответ

4

Он преобразует каждый последующий символ в его целочисленный порядковый номер, как String#ord. Тем не менее,

string.unpack 'C*' 

является точным эквивалентом

string.each_char.map(&:ord) 
3

Но что это на самом деле в конечном итоге делает для ввода строки I

Он не делает ничего, чтобы вход. И вход здесь не является строкой. Он вводится как строка, но на самом деле это буфер двоичных данных, например, вы можете получать по сети, и ваша цель - извлечь эти данные в массив целых чисел. Пример:

s = "\01\00\02\03" 
arr = s.unpack("C*") 
p(arr) # [1,0,2,3] 

что «строка» будет бессмысленным как строка текста , но вполне жизнеспособна в качестве буфера данных. Распаковка позволяет просматривать данные.

+0

Я не могу понять, почему это ниспровергается, поэтому я поддерживаю его ради здравого смысла. – mudasobwa