我有一个 unsigned int[16] 数组,打印出来时如下所示:
4418703544ED3F688AC208F53343AA59
打印出来的代码是这样的:
for (i = 0; i < 16; i++)
printf("%X", CipherBlock[i] / 16), printf("%X",CipherBlock[i] % 16);
printf("\n");
我需要将这个 unsigned int 数组“CipherBlock”传递给只接受 unsigned char * 的 decrypt() 方法。如何在不丢失信息的情况下正确地将“CipherBlock”数组中的所有内容 memcpy 到 unsigned char 数组中?
我的理解是 unsigned int 是 4 个字节,unsigned char 是 1 个字节。由于“CipherBlock”是 16 个无符号整数,总字节数 = 16 * 4 = 64 字节。这是否意味着我的 unsigned char[] 数组的长度需要为 64?
如果是这样,下面的方法行得通吗?
unsigned char arr[64] = { '\0' };
memcpy(arr,CipherBlock,64);
这似乎行不通。由于某种原因,它只将“CipherBlock”的第一个字节复制到“arr”中。 "arr"的其余部分是之后的 '\0'。
最佳答案
int
是至少 16 位,在这方面与short
相同。
在您的情况下,看起来每个 unsigned int
的值都是 0-255 或 00-FF,这是 unsigned char
的安全范围。但是,将一个转换为另一个的正确方法是强制转换:
for (int i=0; i<16; ++i) arr[i] = (unsigned char) CipherBlock[i];
但是您没有指定decrypt()
需要什么样的数据。从签名来看,我怀疑是整数数据(字符串通常是 char*
或 const char*
),但如果没有上下文就很难确定。
请注意,您也可以执行 printf("%02X", CipherBlock[i]);
进行打印。
关于c - 如何在不丢失任何信息的情况下将十六进制的 unsigned int[16] 转换为 unsigned char 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12342890/