Как распечатать байт в виде двузначного шестнадцатеричного символа? - PullRequest
8 голосов
/ 21 декабря 2011

Мне нужно генерировать случайные идентификаторы GUID в C, в Windows. У меня есть:

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). Как я могу это сделать?

1 Ответ

27 голосов
/ 21 декабря 2011

Попробуйте printf("%02X", an_integer).02X указывает на заполнение нулями до двух отображаемых символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...