В ответ на ваш первоначальный вопрос о записи 2-байтовых двоичных данных в файл в C ++ у вас есть базовый двухэтапный процесс. (1) преобразуйте строковое представление числа в числовое значение, используя stoi
с основанием 16
. Это обеспечивает числовые значения, которые вы можете сохранить в unsigned short
. (2) записать это значение в ваш файл с помощью f.write
, а не frwite
, где f
- это ссылка на ваш открытый поток.
Если вы хотите отформатировать вывод в шестнадцатеричном формате для cout
, тогда вы должны установить флаги для cout
, чтобы выводить числовые значения в шестнадцатеричном формате (хотя это не является частью вашего вопроса, это связано с потоком I / O форматирование при желании.)
То есть, по сути, у вас есть строка и преобразована в число, например,
std::string str = "e101";
unsigned short u = stoi(str, 0, 16);
Теперь u
содержит числовое значение, преобразованное из текста в str
с использованием base-16 , которое вы можете просто записать в файл в виде 2-байтового значения, например,
std::string filename = "out.bin"; /* output filename */
...
std::ofstream f (filename, f.trunc | f.binary); /* open out in binary */
if (!f.write(reinterpret_cast<char*>(&u), sizeof u)) { /* write 2 bytes */
std::cerr << "error: write of short to file failed.\n";
return 1;
}
В целом, вы можете сделать что-то короткое, чтобы вывести шестнадцатеричное значение, записываемое с помощью cout
, а также записать его в файл "out.bin"
, например,
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
int main (void) {
std::string filename = "out.bin"; /* output filename */
std::string str = "e101";
unsigned short u = stoi(str, 0, 16);
/* output converted value to terminal in hex */
std::cout.setf(std::ios::hex, std::ios::basefield); /* set hex output */
std::cout << "writing value to file: " << u << '\n'; /* for cout */
/* output converted value to file */
std::ofstream f (filename, f.trunc | f.binary); /* open out in binary */
if (!f.write(reinterpret_cast<char*>(&u), sizeof u)) { /* write 2 bytes */
std::cerr << "error: write of short to file failed.\n";
return 1;
}
}
Пример использования / Вывод
$ ./bin/stoi_short
writing value to file: e101
Результирующий выходной файл
Подтвердите, сбросив содержимое файла с помощью программы hexdump, например,
$ hexdump out.bin
0000000 e101
0000002
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.