首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移位扩展ASCII码

移位扩展ASCII码
EN

Stack Overflow用户
提问于 2017-12-07 06:14:46
回答 0查看 101关注 0票数 1

在将扩展ASCII代码分配给无符号字符时,我注意到在将这些值写入文件时,这些值会向上移动。

我将我的代码压缩到这个简单的程序中,简要地提出了我的问题:

代码语言:javascript
复制
#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;
}

如果我运行这个简单的程序,我会得到这个终端输出:

代码语言:javascript
复制
122
150
175

这是正确的。

如果我现在将以下内容添加到上述程序中:

代码语言:javascript
复制
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并运行:

代码语言:javascript
复制
od -c testascii

我得到以下输出:

代码语言:javascript
复制
0000000   z 226 257
0000003

如您所见,标准ASCII代码(128以下)显示正确;但是扩展ASCII代码(127以上)已更改。我预计他们是150和175,但他们是226和257。

如果我从文件打开命令中删除二进制标志,结果仍然是一样的。

作为最后的检查,我没有使用二进制打印(fwrite),而是再次更改了代码,循环遍历了数组,并对每一项执行了如下fprintf:

代码语言:javascript
复制
fprintf (fp, "%d", appendtxt[i]);

这是它的OD显示:

代码语言:javascript
复制
0000000   1   2   2   1   5   0   1   7   5
0000011

这一切都告诉我,二进制打印(fwrite)没有完成我所期望的工作。据我所知,fwrite命令将二进制数据写入文件。在这种情况下,为什么它成功地写入了一个小于128的值,但却失败了,值等于或大于128?

环境:代码::Blocks 16.01 Centos 7.1

注意:我确实发现了这个类似的问题:fwrite with non ASCII characters,但它似乎对我的情况没有帮助。我可能错了。如果我在那篇文章中遗漏了什么,请告诉我?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47684335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档