【发布时间】:2021-09-27 14:19:30
【问题描述】:
我有一个长度为 32 的无符号字符数组 c1。
unsigned char c1[32]
现在我有了一个加密函数,细节很长。基本上这个加密只是给c1加了一些值。
encrypt(&c1,private_key,public_key,message);
现在我有以下代码可以将其转换为十六进制字符串:
printf("Initial value is %02x",c1);
char *sit = malloc(sizeof c1 * 2 + 1);
for (size_t i = 0; i < sizeof c1; i++)
{ sprintf(sit + i * 2, "%02x", c1[i]);
}
现在我尝试取回 unsigned char 数组:
unsigned char recvalue[32];
for(int i=0;i<32;i++)
{
unsigned testchar=0;
sscanf(&sit[i*2],"%02x",&testchar);
recvalue[i]=(unsigned char)testchar;
}
printf("The final value is %02x",recvalue);
现在这里的 c1 和 recvalue 的值不匹配,但我需要它们匹配。任何帮助将不胜感激。
【问题讨论】:
-
i < sizeof c1这看起来不对。sizeof c1是以字节为单位的数组大小(假设它是一个实际数组而不是动态内存缓冲区),而不是数组中的条目数。如需进一步帮助,请提供完整代码minimal reproducible example。 -
确实如此。但是从代码中并不清楚,因为您没有显示定义。请按要求提供完整的代码。如果您想质疑为什么需要这样做,请阅读链接。
-
printf语句不打印数组的内容。他们只是打印每个人的地址。你需要遍历它们。 -
printf("The final value is %02x",&recvalue);我相信你的意思是*recvalue不是&recvalue。同样,正如@dbush 指出的那样,如果您打算打印需要循环的整个内容。 -
@ArnabGhosh 它们不应该匹配,因为您正在打印两个单独数组的地址(并且不正确)。你想遍历每一个并打印内容。