2016-11-21 2 views
0

der Dokumenten, unpack tut:Ruby: Was macht eigentlich das Auspacken ("C")?

str decodiert (die binäre Daten enthalten kann) entsprechend dem Format string, extrahiert ein Array von jedem Wert zurückkehrt.

Und das "C" Format bedeutet 8-bit unsigned (unsigned char).

Aber was macht das eigentlich am String, den ich eingegeben habe? Was bedeutet das Ergebnis, und wenn ich es von Hand machen müsste, wie würde ich das tun?

Antwort

4

Es konvertiert jedes nachfolgende Zeichen in seine Ganzzahl, wie . Das heißt,

string.unpack 'C*' 

ist eine exakte Äquivalent

string.each_char.map(&:ord) 
3

Aber was bedeutet dies eigentlich

tun mit dem String I-Eingang am Ende Es tut nichts zu die Eingabe. Und die Eingabe ist hier nicht wirklich eine Zeichenfolge. Es wird als String typisiert, aber es ist wirklich ein Puffer aus binären Daten, wie Sie sie möglicherweise durch Vernetzung erhalten, und Ihr Ziel ist es, diese Daten in ein Array von ganzen Zahlen zu extrahieren. Beispiel:

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

Das „string“ wäre sinnlos, als eine Reihe von Text, aber es ist durchaus lebensfähig als Datenpuffer. Wenn Sie es auspacken, können Sie die Daten untersuchen.

+0

Ich kann nicht verstehen, warum dies abgelehnt wird, also habe ich es für den gesunden Menschenverstand upvoted. – mudasobwa