Как я могу записать в файл по одному байту за раз от int?C ++ - PullRequest
0 голосов
/ 19 мая 2018

Я пишу в файл по одному байту за раз в C ++.Пока у меня есть такой код:

if ( i == 0 ) { outputfile << '\x0';}
if ( i == 1 ) { outputfile << '\x1';}
....
if ( i == 254 ) { outputfile << '\xfe';}
if ( i == 255 ) { outputfile << '\xff';}

Он работает, но, как вы можете себе представить, это дополнительные 255 строк.Если бы я использовал Python, это было бы так просто:

output.write(bytes((i,)))

Есть ли более простой способ записать однобайтовые целые числа в байты?Как максимум пары строк кода?

Я пытался использовать char и некоторые преобразования за последний день, но я совсем не умею обращаться с этим типом данных.Файл, который я пишу, оказывается поврежденным.Несмотря на то, что размер файла у меня правильный, он занимает больше места на диске, чем нужно, когда я пытаюсь таким образом.

Спасибо за чтение

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Вам не нужно ни одного из этих if утверждений.просто распечатайте (char) i.

Когда вы помещаете тип данных (например, char, int, double, float) в скобках перед переменной, это преобразует эту переменную в тип.

(int) 'a' преобразует символ 'a' в целое число со значением 97.

(char) 97 преобразует целое число 97 в символ 'a'.

Есть много разных вещей, которые вы можете делать с приведением типов, и вы должны знать о возможных переполнениях, но я оставлю это для вас.

0 голосов
/ 19 мая 2018

В каждой строке вы просто конвертируете int i в char.

Это соответствует логике всего вашего кода.

outputfile << static_cast<char>(i);

Однако, вы, вероятно, не хотите форматирования текста, который использует operator <<, и должны вместо этого написать:

outputfile.put( static_cast<char>(i) );
...