我愿意安全地将数据从 unsigned char hash [512 + 1] 传输到 char res [512 + 1] 。
我的C哈希库MHASH会返回一个结果,因此可以按下面列出的方式打印。
for (int i = 0; i < size /*hash block size*/; i++)
printf("%.2x", hash[i]); // which is unsigned char - it prints normal hash characters in range [a-z,0-9]
printf("\n");
我愿意这样做(见下文)。
const char* res = (const char *)hash; // "hash" to "res"
printf("%s\n", res); // print "res" (which is const char*) - if i do this, unknown characters are printed
我知道char和unsigned char之间的区别,但我不知道如何传输数据。任何答案都将非常感谢,提前感谢。但请不要向我推荐C ++(STD)代码,我正在开发一个非STD链接的项目。
答案 0 :(得分:1)
鉴于unsigned char
数组的内容是可打印字符,您始终可以安全地将其转换为char
。使用memcpy的硬拷贝或指针引用,就像你已编写的代码一样。
我猜这里的实际问题是unsigned char数组内容实际上不是可打印字符,而是某种格式的整数。您必须将它们从整数转换为ASCII字母。如何执行此操作取决于数据的格式,这在您的问题中不明确。
答案 1 :(得分:0)
假设如下:
#define ARR_SIZE (512 + 1)
unsigned char hash[ARR_SIZE];
char res[ARR_SIZE];
/* filling up hash here. */
只是做:
#include <string.h>
...
memcpy(res, hash, ARR_SIZE);
答案 2 :(得分:0)
好的,谢谢你们的答案,但遗憾的是还没有任何工作。我现在坚持使用下面的代码。
char res[(sizeof(hash) * 2) + 1] = { '\0' };
char * pPtr = res;
for (int i = 0; i < hashBlockSize; i++)
sprintf(pPtr + (i * 2), "%.2x", hash[i]);
return (const char *)pPtr;
直到有任何其他更高效的方式来完成这项工作。没错,我的问题与MHASH图书馆密切相关。