【发布时间】:2020-08-10 11:17:20
【问题描述】:
我正在制作一个写入二进制文件的程序,这个二进制文件的内容在一个无符号字符指针中。下一个代码是我用来生成二进制文件的方式
while (f > 0) {
oct = (unsigned char) *datosOct->informacion++;
for (int i = 2; i >= 0; --i)
{
char actual = ((oct & (1 << i)) ? '1' : '0');
temporal = appendCharToCharArray(temporal, actual);
}
f--;
}
datosBin->informacion = (unsigned char*)temporal;
我在 wb 模式下使用了fopen,但它的字面意思是写一个包含 1 和 0 的文件。这是我用来编写的函数(我使用 Visual Studio 的默认编译器)。我用下面的代码写文件
file = fopen(nombreArchivo, "wb");
fwrite(datosBin->informacion, sizeof(char), archivoEnOctal->tamanio, file);
我的出发点是一个包含'1's 和'0's 的char 数组,'1's 和'0's 的每个字节代表一个ASCII 值。例如,'1010000' 是表示字母“P”的 ASCII 80,如果我在找到 ASCII 为 00 的值时将二进制字符数组(“1010000”)转换为字符数组(“P”),则将它们视为文本的结尾,并且不会将它们写入最终文件。我的代码的可能输出之一是图像,因此我需要将这些值写入 00。我尝试使用此方法直接写入字符,但由于我之前提到的原因,这不适用于图像
while (f > 0) {
oct = (unsigned char) *datosOct->informacion++;
for (int i = 2; i >= 0; --i)
{
if (size == 8) {
size = 0;
char nuevaLetra = strtol(temporal, 0, 2);
if (nuevaLetra == 00) {
nuevaLetra = '\0';
//nuevaLetra = (char) 0;
}
response = appendCharToCharArray(response, nuevaLetra);
temporal = (char*)"";
}
size++;
char actual = ((oct & (1 << i)) ? 1 : 0);
temporal = appendCharToCharArray(temporal, actual);
}
f--;
}
【问题讨论】:
-
你有什么问题?
-
只写二进制,甚至不写二进制?
char actual = ((oct & (1 << i)) ? '1' : '0');分配 字符'0'或'1'而不是 值0或1。 -
只写字节。
-
@juanjosemontoya - 代码
char actual = ((oct & (1 << i)) ? 1 : 0);与char actual = ((oct & (1 << i)) ? '1' : '0');不同 - 您最后的评论是不真实的。 -
@enhzflep 当我使用 char 实际 = ((oct & (1
标签: c