如何将字节打印为两位十六进制字符?

cm0*_*007 10 c printf

我需要在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]);
}
Run Code Online (Sandbox Code Playgroud)

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

D.S*_*ley 30

试试printf("%02X", an_integer).该02X说零填充到两个显示字符.