【问题标题】:How to print a byte as a two-digit hexadecimal character?如何将字节打印为两位十六进制字符?
【发布时间】:2011-12-20 20:56:34
【问题描述】:

我需要在 Windows 中用 C 语言生成随机 GUID。我有:

HCRYPTPROV hCryptProv = 0;
BYTE pbBuffer[16];
int i;
if (!CryptAcquireContextW(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
    exit(1);
for (i = 0; i < N; i++) {
    if (!CryptGenRandom(hCryptProv, 16, pbBuffer))
        exit(1);
    printf("%X%X%X%X-%X%X-%X%X-%X%X-%X%X%X%X%X%X\n", pbBuffer[0], pbBuffer[1], pbBuffer[2], pbBuffer[3],
                                                     pbBuffer[4], pbBuffer[5], pbBuffer[6], pbBuffer[7],
                                                     pbBuffer[8], pbBuffer[9], pbBuffer[10], pbBuffer[11],
                                                     pbBuffer[12], pbBuffer[13], pbBuffer[14], pbBuffer[15]);
}

但是,这会将小于 0F 的任何字节打印为单个字符(例如,0000-00-00-00-000000,如果每个 pbBuffer[j]0)。我需要将每个字节打印为两个字符(例如,00000000-0000-0000-0000-000000000000,如果每个pbBuffer[j]0)。我该怎么做?

【问题讨论】:

标签: c printf


【解决方案1】:

试试printf("%02X", an_integer)02X 表示对两个显示字符进行零填充。

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2014-10-07
    • 2013-12-13
    相关资源
    最近更新 更多