Я пытаюсь сделать следующее:
У меня есть собранный объект ostringstream, содержащий шестнадцатеричные данные для передачи. Скажем, это может быть
03125412349876543210af (this is representing the data using hex convention in my string)
Эта строка представляет 11 байтов, поэтому, например, последний передаваемый байт - это 0xaf (два символа дают мне 8 бит фактических данных).
Я использую sh, чтобы прочитать каждую пару символов, например пару символов «03» в строке, и преобразовать ее в элемент uint8_t, который я sh перенесу в вектор элементов uint8_t. По сути, я создам новый вектор элементов uint8_t на основе содержимого строки, а затем передам вектор.
Моя тестовая программа ниже работает нормально для int, но не дает мне того, что я хочу для uint8_t. Есть ли элегантный и / или простой способ сделать то, что я пытаюсь сделать, что кто-нибудь может предложить?
(Примечание: пример 3 был для того, чтобы увидеть, что произойдет, если использовалось не шестнадцатеричное значение. пример 1, значение вроде 34r0 преобразует 34 (шестнадцатеричное) в эквивалентное int и игнорирует r и все, что следует за ним).
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
// example 1: making a hex string an int - works
std::stringstream str1;
std::string s1 = "5f";
str1 << s1;
int value1;
str1 >> std::hex >> value1;
cout << value1 << endl; // produces 95 - perfect
cout << "~~~~~~~~~" << endl;
// example 2: making a hex string a uint8 - not the result I want
std::stringstream str2;
std::string s2 = "5f";
str2 << s2;
uint8_t value2;
str2 >> std::hex >> value2;
cout << value2 << endl; // produces 5 - not what I want!
cout << "~~~~~~~~~~~" << endl;
// example 3: using non-hex values
std::stringstream str3;
std::string s3 = "wx";
str3 << s3;
uint8_t value3;
str3 >> std::hex >> value3;
cout << value3 << endl; // produces w - not what I want!
// this does not work either
uint8_t value4;
cout << "~~~~~~~~~~~~~~" << endl;
value4 = (uint8_t)value1;
cout << value4 << endl; // produces - - not what I want!
cout << "............." << endl;
return 0;
}
Результат этой тестовой программы выглядит следующим образом:
Hello world!
95
~~~~~~~~~
5
~~~~~~~~~~~
w
~~~~~~~~~~~~~~
_
.............
Process returned 0 (0x0) execution time : 0.022 s
Press any key to continue.
Пример 1 работает нормально, но использование int - это не то, что мне нужно.