2012-09-24 96 views
3

處理某些需要函數中無符號字符的加密,但想要在解密後轉換爲字符以供使用。所以,我有:Unsigned char char *和int在C中?

unsigned char plaintext[16]; 
char *plainchar; 
int plainint; 

... Code now populates plaintext with data that happens to all be plain text 

現在,在這一點上,我們說明文實際上是「」的數據串。我如何將明文的值作爲「012456789」獲取到plainchar中,並同時將plainint作爲123456789?

- 編輯 -

這樣做時,明文等於 「AAAAAAAAAA105450」:

unsigned char plaintext[16]; 
char *plainchar; 
int plainint; 

... Code now populates plaintext with data that happens to all be plain text 

plainchar = (char*)plaintext; 

使plainchar等於「AAAAAAAAAA105450╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠┤∙7「,sizeof = 51.加密代碼是rijndael示例代碼,所以它應該工作正常。

感謝, 本

+2

我希望你不會認爲字符串「1234」(0x31323334)與二進制字符數組「0x01020304」等效。只是檢查;) – paulsm4

+0

查看http://stackoverflow.com/questions/7021725/converting-string-to-integer-c – szx

回答

5

你的PLA在文本字符串中沒有終止。所有的字符串必須有一個額外的字符來告訴字符串的結尾。這個字符是'\0'

聲明plaintext變量

unsigned char plaintext[17]; 

,你與解密完成後,本

plaintext[last_pos] = '\0'; 

變化last_pos添加到解密文本的最後位置,默認爲16(最後一個索引的陣列)。

+0

哇。我已經離開C太久了。像魅力一樣工作。謝謝! – Fmstrat

1

我認爲它只是

plainchar = (char*)plaintext; 
sscanf(plainchar, "%d", &plainint); 
1

爲無符號的字符爲char *

plainchar = (char*)plaintext; 

無符號爲int

sscanf(plainchar, "%d", &plainint); 
+0

檢查您的加密算法 –

+0

@BenCurtis:更新您的問題,而不是使用評論。 –

+0

謝謝(和@Sodved),除了這不會爲我創建預期的結果。出於某種原因,如果明文是「AAAAAA123456」,並且我這樣做了,那麼plainchar現在等於「AAAA123456 <隨機亂碼數據>」和sizeof報告51.思考? – Fmstrat