将无符号字符写入输出文件
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;
}
这可能是一个简单的问题,但我不确定为什么我没答对。 我有 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;
}