2011-07-21 45 views
0

我使用紅寶石1.9.2,這就是我發現的。如果高半字節首先零應該加上第一個

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

由於H需要高半字節先,自輸入A只有一個半字節的附加半字節應在前面填充。這意味着上面的代碼應該是相同的

> ['0A'].pack('H') 

但似乎我失去了一些東西。任何人都在意解釋。

由於第一種情況的答案是\xA0很顯然零被填充到右邊。但是,當我們首先處理高位半字節時,A應該與0A相同。

回答

0

如果你打包半個字節,一個半字節,這就是你會得到的。你需要指定輸入的字符串是在蠶食多久:

'X'.unpack('h') 
# => ["8"] 
'X'.unpack('h2') 
# => ["85"] 

'X'.unpack('H') 
# => ["5"] 
'X'.unpack('H2') 
# => ["58"] 

pack是做的unpack相反,所以不要忽略長度參數。

+0

謝謝。然而,問題是爲什麼'['A'] .pack('H2')=>「\ xA0」'最後加了一個零。我認爲在這種情況下,應該在A之前加上零,這應該導致十進制值10,並且輸出應該是'\ n'。 –

+0

它不是「添加零」,它創建了一個值爲「0xA0」的單個字節,並且由於前四位是高位半字節,這就是「A」所在的位置。 '''A0']。pack('H2')'與'['0A']。pack('h2')'相同,所以如果你需要高低順序而不是低 - h'而不是'H'。如果只給予一個字符,我不知道爲什麼你期望「高第一」填充低位字節。 – tadman

+0

謝謝。這清除了我的困惑。 –

相關問題