将未签名的字符写入输出文件

Writing unsigned char into an output file

本文关键字:输出 文件 字符      更新时间:2023-10-16

这可能是一个简单的问题,但我不确定为什么我没有做对。 我有未签名的字符 buf,我需要将其数据写入输出文件f_out。当我写如下时:

f_out << buf;

我得到正确的数据。

但是,我想逐行写入数据,32位(char(在一行中,因为数据是二进制数。我使用了以下内容,但我得到了完全不同的数据:

for (int i = 1; i < Buff_size; i++) {
for (int j = 1; j <= 32; j++) {
f_out << buf[i];
}
f_out << endl;
}

在你拥有的代码中,以下循环:

for (int j = 1; j <= 32; j++) {
f_out << buf[i];
}

将在每行上写入数组的每个元素32 次

如果你想做的是每个元素只写一次,但每行有 32 个元素,你需要这样的东西:

int i, j;
for (i = 0, j = 0; i < Buff_size; i++) {
f_out << buf[i];
if (++j == 32) { // 32 done ...
f_out << endl; // ... write newline
j = 0;         // ... and reset count
}
else f_out << " "; // Stay on same line - but insert a space
}
if (j != 0) f_out << endl; // If we have 'leftover' buffer

请随时要求进一步的解释和/或澄清。

不确定我是否有问题。代码中存在多个问题:

(1( 您跳过了 buf[0],这意味着第一个字节没有写入文件。

(2(您正在写入相同的字节32次。

这是你所期望的吗?我想第二个代码应该更新为:

assert(Buff_size%32 == 0)
for (int i = 0; i < Buff_size/32; i++) {
for (int j = 0; j < 32; j++) {
f_out << buf[i*32 + j];
}
f_out << endl;
}