Восстановление байтовой информации (uint8_t) из хекса (hex)
Для переносимости ключи шифрования представляются из массива uint8_t в шестнадцатиричном виде:
for(int i = 0; i < KEYSIZE; ++i)
std::cout << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(PrivateKey[i]);
В силу специфики hex'а, каждый байт информации представляется двумя символами, т.е. из одного байта выходит целых два. Как корректно прочитать стринг с хексом в массив uint8_t, чтобы восстановить оригинальную байтовую информацию?
Убил около пяти часов, пытаясь осуществить задачу в виде reinterpret_cast<const uint8_t*>(publicKey.c_str()), пока не догадался, что проблема в изложенном выше феномене, а не в каких-то других частях кода. Но с ними, если что, потом ;)
Ответы (1 шт):
Автор решения: wololo
→ Ссылка
Например, можно воспользоваться std::from_chars():
#include <iostream>
#include <charconv>
#include <string>
int main()
{
std::string str = "ff01aa00";
for (std::size_t i = 0; i < str.size(); i += 2)
{
int val = -256;
std::from_chars(&str[i], &str[i+2], val, 16);
std::cout << val << " ";
}
}
255 1 170 0