【发布时间】:2011-10-19 21:24:59
【问题描述】:
如何在 C 中正确地将 char* 复制到 unsigned char*。以下是我的代码
int main(int argc, char **argv)
{
unsigned char *digest;
digest = malloc(20 * sizeof(unsigned char));
strncpy(digest, argv[2], 20);
return 0;
}
我想正确地将 char* 数组复制到 unsigned char* 数组。我使用上面的代码收到以下警告
warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness
编辑:添加更多信息,我的要求是调用者在命令行上将 SHA 摘要作为字符串提供给主函数,并且主函数在内部将其保存在摘要中。 SHA 摘要最好用无符号字符表示。
现在的问题是我无法更改主函数的签名 (** char),因为主函数将它需要的其他参数解析为 char* 而不是 unsigned char*。
【问题讨论】:
-
哈希摘要通常表示为摘要的十六进制值的 ASCII 表示(例如“
b6379dab2c...”)。char非常适合这个! -
@oli 所以基本上演员应该也可以正常工作,没有任何问题 strncpy((char*)digest, argv[2], 20);因为我们在处理 ASCII?
-
@Rajiv:有两种不同的方式来表示 SHA-1 摘要,即 160 位。其中一种方法是使用 20 个 8 位字节,
unsigned char是最好的类型。另一种方法是使用 ASCII 表示,其中每个字符都是一个十六进制数字,代表 4 位,因此需要 40 个。显然strncpy不会在它们之间转换。 -
@Steve:是的,我使用的是 20 个 8 位的 unsigned char 版本。如果 strncpy 不能, memcpy 或任何其他函数都可以解决问题?
-
@Rajiv:您认为用户将如何在终端输入这些 8 位值?如果其中一个是 0 怎么办?
标签: c char sha1 unsigned strcpy