2014-02-17 248 views
0

我試圖將密文(來自AES加密)轉換爲十六進制值。將字符轉換爲十六進制

我用下面的代碼(狀態是密文)的轉換:

foreach(char *v, state) { 
    printf("%02X", *v); 
}  

對於這個密文:

'4¥W[™úËj$Ó¶U6 

我得到這樣的輸出:

2734FFFFFFA5575BFFFFFF99FFFFFFFAFFFFFFCB6A240BFFFFFFD318FFFFFFB65536 

這不是這個密文正確的十六進制格式。我嘗試了所有導致相同結果的其他轉換方法。

編輯: 的foreach代碼:

#define foreach(item, array) \ 
for(int keep = 1, \ 
count = 0,\ 
size = sizeof (array)/sizeof *(array); \ 
keep && count != size; \ 
keep = !keep, count++) \ 
for(item = (array) + count; keep; keep = !keep) 
+1

您的值需要是無符號的,否則您擴展了符號位。將'* v'轉換爲'unsigned char'。 – WhozCraig

+1

這個'foreach'宏可能贏得某種最少維護的代碼獎。 – unwind

+0

這是使用宏的一個非常糟糕的方式。除了在定義中至少有一個錯誤 - 「sizeof *(array)',並且在調用它的方式中有一個錯誤 - foreach(char * v,state)',實際上不可能遵循並瞭解你在做什麼。把它寫成一個正常的函數,問題很可能會被揭示(如果不是,那麼你仍然可以輕鬆地調試你的代碼並找到它)。 –

回答

1

這不是C,有一個在C.沒有foreach這可能是C++,在這種情況下,問題是,參數printf()%x轉換指定是正在簽署擴展。您的平臺可能有簽署的char類型。

將值轉換爲unsigned char

+0

的確,我忘了添加foreach宏。 – pattex007

相關問題