我有一个无符号的int[16]数组,当打印出来时如下所示:
4418703544ED3F688AC208F5343AA59
用于打印的代码如下:
for (i = 0; i < 16; i++)
printf("%X", CipherBlock[i] / 16), printf("%X",CipherBlock[i] % 16);
printf("\n");
我需要将这个无符号int数组“CipherBlock”传递到一个只接受无符号char*的decrypt()方法中。如何正确地将从“CipherBlock”数组到无符号char数组的所有内容memcpy,而不丢失信息?
我的理解是无符号int是4字节,无符号char是1字节。因为“CipherBlock”是16个无符号整数,所以总大小(字节)为16*4=64字节。这是否意味着我的无符号char[]数组的长度需要为64?
如果是的话,下面的方法行得通吗?
unsigned char arr[64] = { '\0' };
memcpy(arr,CipherBlock,64);
这似乎行不通。出于某种原因,它只将“CipherBlock”的第一个字节复制到“arr”。“arr”的其余部分此后为“\0”。
最佳答案
int
至少是16位,在这方面与ashort
相同。
看起来每个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 - 如何在不丢失任何信息的情况下将十六进制的无符号int [16]转换为无符号char数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12342890/