چاپ آرایه‌ای از unsigned char بصورت هگزادسیمال

هر بایت (۸ بیت) را می‌توان بصورت دو رقم هگزادسیمال نوشت. دادهٔ نوع unsigned char، یک بایت حجم دارد؛ بنابراین باید بتوان مقدار آن را بصورت دو رقم هگزادسیمال نوشت. کد زیر آرایه‌ای از unsigned char را بصورت هگزادسیمال چاپ می‌کند.

#include <stdio.h>

#define DATA_LENGTH 5

int main()
{
    unsigned char data[DATA_LENGTH] = {0x00, 0x12, 0xB3, 0xFF, 0xF0};
    char str[DATA_LENGTH * 2 + 1] = {00};
    char hd[2];
    int i, quo, rem;

    for(i = 0; i < DATA_LENGTH; i++)
    {
        quo = data[i] / 16;
        rem = data[i] % 16;
        hd[0] = (quo < 10) ? 48 + quo : 87 + quo;
        hd[1] = (rem < 10) ? 48 + rem : 87 + rem;
        sprintf(str + (i * 2), "%c%c", hd[0], hd[1]);
    }
    str[DATA_LENGTH * 2] = '\0';

    printf("%s\n", str);

    return 0;
}

خروجی کد بالا:

0012b3fff0

کد بالا را بشکل زیر نیز می‌توان نوشت:

#include <stdio.h>

#define DATA_LENGTH 5

int main()
{
    unsigned char data[DATA_LENGTH] = {0x00, 0x12, 0xB3, 0xFF, 0xF0};
    char str[DATA_LENGTH * 2 + 1] = {00};

    int i;
    for(i = 0; i < DATA_LENGTH; i++)
        sprintf(str + (i * 2), "%02x", data[i]);
    str[DATA_LENGTH * 2] = '\0';

    printf("%s\n", str);

    return 0;
}

خروجی کد بالا:

0012b3fff0

MD5 checksums:
e2a4908740645b72ea90a1682f7d8ab8 *unsigned_char_01.zip
ce87f75b5a203d3f4979acb62e055ed1 *unsigned_char_02.zip