移位扩展 ASCII 码
Shifting Extended ASCII codes
在将扩展 ASCII 代码分配给 unsigned char 时,我注意到将值写入文件时会向上移动。
我将我的代码压缩到这个简单的程序中来简要介绍我的问题:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char testascii[3];
testascii[0] = 122;
testascii[1] = 150;
testascii[2] = 175;
printf("%d\n", testascii[0]);
printf("%d\n", testascii[1]);
printf("%d\n", testascii[2]);
return 0;
}
如果我运行这个简单的程序,我得到这个终端输出:
122
150
175
这是正确的。
如果我现在将以下内容添加到上面的程序中:
FILE *f;
f = fopen("/mystuff/testascii", "wb");
if (f == NULL)
{
printf("Error opening file\n");
exit(1);
}
fwrite(testascii, 1, 3, f);
fclose(f);
它 运行 是正确的,但如果我现在转到 O/S 和 运行:
od -c testascii
我得到这个输出:
0000000 z 226 257
0000003
如您所见,标准 ASCII 码(128 以下)已正确显示;但是,扩展 ASCII 代码(127 以上)已更改。我希望它们是 150 和 175,但它们是 226 和 257。
如果我从文件打开命令中删除二进制标志,结果仍然相同。
作为最后的检查,我再次更改代码并循环遍历数组并对每个项目执行 fprintf,而不是二进制打印 (fwrite):
fprintf (fp, "%d", appendtxt[i]);
这是 OD 显示:
0000000 1 2 2 1 5 0 1 7 5
0000011
这一切都告诉我二进制打印 (fwrite) 没有按照我的预期进行。我的理解是 fwrite 命令将二进制数据写入文件。在那种情况下,为什么写入小于 128 的值成功,但写入等于或大于 128 的值却失败?
环境:
Code::Blocks 16.01
Centos 7.1
注意:我确实发现了这个类似的问题: 但它似乎对我的情况没有帮助。我可能是错的。如果我遗漏了某些内容,请告诉我 post?
您正在以八进制打印(这是默认情况下 od 所做的),226 八进制是 150 十进制。
在将扩展 ASCII 代码分配给 unsigned char 时,我注意到将值写入文件时会向上移动。
我将我的代码压缩到这个简单的程序中来简要介绍我的问题:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char testascii[3];
testascii[0] = 122;
testascii[1] = 150;
testascii[2] = 175;
printf("%d\n", testascii[0]);
printf("%d\n", testascii[1]);
printf("%d\n", testascii[2]);
return 0;
}
如果我运行这个简单的程序,我得到这个终端输出:
122
150
175
这是正确的。
如果我现在将以下内容添加到上面的程序中:
FILE *f;
f = fopen("/mystuff/testascii", "wb");
if (f == NULL)
{
printf("Error opening file\n");
exit(1);
}
fwrite(testascii, 1, 3, f);
fclose(f);
它 运行 是正确的,但如果我现在转到 O/S 和 运行:
od -c testascii
我得到这个输出:
0000000 z 226 257
0000003
如您所见,标准 ASCII 码(128 以下)已正确显示;但是,扩展 ASCII 代码(127 以上)已更改。我希望它们是 150 和 175,但它们是 226 和 257。
如果我从文件打开命令中删除二进制标志,结果仍然相同。
作为最后的检查,我再次更改代码并循环遍历数组并对每个项目执行 fprintf,而不是二进制打印 (fwrite):
fprintf (fp, "%d", appendtxt[i]);
这是 OD 显示:
0000000 1 2 2 1 5 0 1 7 5
0000011
这一切都告诉我二进制打印 (fwrite) 没有按照我的预期进行。我的理解是 fwrite 命令将二进制数据写入文件。在那种情况下,为什么写入小于 128 的值成功,但写入等于或大于 128 的值却失败?
环境: Code::Blocks 16.01 Centos 7.1
注意:我确实发现了这个类似的问题:
您正在以八进制打印(这是默认情况下 od 所做的),226 八进制是 150 十进制。