Parsintg UUID с использованием sscanf - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь проанализировать строку UUID в массив std :: через sscanf, но что-то не так, и я не могу шить, чтобы решить проблему:

std::array<uint8_t, 16> arr{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
sscanf("00112233-4455-6677-8899-AABBCCDDEEFF", 
    "%hhx%hhx%hhx%hhx-%hhx%hhx-%hhx%hhx-%hhx%hhx-%hhx%hhx%hhx%hhx%hhx%hhx", 
    &arr[0], &arr[1], &arr[2], &arr[3], &arr[4], &arr[5], &arr[6], &arr[7],
    &arr[8], &arr[9], &arr[10], &arr[11], &arr[12], &arr[13], &arr[14], &arr[15]
);

Массив содержит 0x33,0xab,0x89,0x67,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 потом. Есть идеи, что случилось?

1 Ответ

1 голос
/ 07 апреля 2020

Вам также необходимо указать ширину 2:

std::sscanf("00112233-4455-6677-8899-AABBCCDDEEFF", 
    "%2hhx%2hhx%2hhx%2hhx-%2hhx%hhx-%2hhx%2hhx-%2hhx%2hhx-"
    "%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx", 
    &arr[0], &arr[1], &arr[2], &arr[3], &arr[4], &arr[5], &arr[6], &arr[7],
    &arr[8], &arr[9], &arr[10], &arr[11], &arr[12], &arr[13], &arr[14], &arr[15]
);
...