将无符号字符写入输出文件

Writing unsigned char into an output file

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

f_out << buf;

我得到了正确的数据。

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

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

随时要求进一步解释and/or澄清。

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

(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;
}