c - 如何在 C 编程中循环遍历字节数组并将其存储为十六进制字符串

标签 c arrays hex byte

如何在 C 编程中循环遍历字节数组,并将字符串中每个字节元素的十六进制输出存储为十六进制。我使用的是VS2005。

int main(int ArgC,char** ArgV)
{
    char*           string;
    char            stringSHA1[3];
    char*           stringSHA1Final = "";
    Sha1Context     sha1Context;
    SHA1_HASH       sha1Hash;
    uint16_t        i;

    string = "Hello World";//ArgV[1];

    Sha1Initialise( &sha1Context );
    Sha1Update( &sha1Context, string, (uint32_t)strlen(string) );
    Sha1Finalise( &sha1Context, &sha1Hash );

    stringSHA1Final = malloc(sizeof(sha1Hash)*2 + 1);

    for( i=0; i<sizeof(sha1Hash); i++ )
    {
        printf( "%2.2x", sha1Hash.bytes[i] );
        sprintf_s(stringSHA1, 5, "%s%02x", "0x", sha1Hash.bytes[i] );
        stringSHA1Final[i] = stringSHA1;
    }
    printf( stringSHA1Final );

    return 0;
}

我在将十六进制字符串连接成单个字符串并返回时遇到了麻烦。

最佳答案

您可以使用指针,如下所示

char *sha1final = stringSHA1Final;
for (i = 0 ; i < sizeof(sha1Hash) ; i++)
 {
    int count;
    count = snprintf(sha1final, 2, "%02x", sha1Hash.bytes[i]);
    if (count < 0)
        continue; /* You have to handle this, it's an error */
    sha1final += count;
 }

关于c - 如何在 C 编程中循环遍历字节数组并将其存储为十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596017/

相关文章:

c - 是否可以在没有基于文件描述符的套接字的情况下使用libcurl?

c# - 为什么转换为 IEnumerable 的数组会忽略延迟执行?

java - 在JAVA中将base64图像转换为Sql Blob

java - 十六进制转换为 EBCDIC

c - 为什么这个c程序中出现Segmentation failure错误?

c - 段错误: 11 in C Reading from External Text-file

编译 linux 内核的一小部分(即几个文件)

c - 打印结构数组,C

flash - 基于文件加载百分比的 RGB 渐变

ruby - 将 Hex STDIN/ARGV/gets 转换为 ruby​​ 中的 ASCII