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

How to loop through a byte array in C programming and store in a string as Hexadecimal

如何在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;
}

我在将十六进制字符串连接成单个字符串时遇到问题 return。

你可以像这样使用指针

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;
 }