如何与char * 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 *阵列。添加更多的信息,我的要求是,来电者提供一个SHA消化的主要功能是在命令行的字符串和主要功能内部保存:我用上面的代码
warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness
编辑收到以下警告它在消化。 SHA摘要最好用一个无符号字符表示。
现在的问题是我无法更改主函数(** char)的签名,因为主函数会将其需要的其他参数解析为char *而不是unsigned char *。
散列摘要通常表达为摘要十六进制值的ASCII表示(例如“b6379dab2c ...”)。一个'char'对此绝对好! –
@oli所以基本上演员也应该没有任何问题strncpy((char *)digest,argv [2],20)正常工作;因为我们正在处理ASCII? – Rajiv
@Rajiv:有两种不同的方式来表示一个SHA-1摘要,它是160位。其中一种方法是使用20个8位字节,'unsigned char'是最好的类型。另一种方法是使用ASCII表示法,其中每个字符都是十六进制数字,代表4位,因此需要其中的40位。显然'strncpy'不会在它们之间进行转换。 –