1

我愿意将数据从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 链接的项目。

4

3 回答 3

1

鉴于unsigned char数组的内容是可打印的字符,您始终可以安全地将其转换为char. 使用 memcpy 的硬拷贝或您已经编写的代码中的指针引用。

我猜这里的实际问题是 unsigned char 数组内容实际上不是可打印的字符,而是某种格式的整数。您必须将它们从整数转换为 ASCII 字母。如何做到这一点取决于数据的格式,这在您的问题中并不清楚。

于 2015-02-20T10:00:48.857 回答
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);
于 2015-02-20T10:48:21.310 回答
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 库密切相关。

于 2015-02-20T11:11:15.840 回答