2012-09-24 95 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