永发信息网

字符型数据 按11111111储存,对应的ASCII值应该是多少?怎么运行后是y上2点。。它的ASCII值是多少?

答案:2  悬赏:20  手机版
解决时间 2021-02-07 18:15
  • 提问者网友:送舟行
  • 2021-02-07 15:17
但是我写了程序运行后,能得到一个字符,暨y上两个点 的一个字符,它显然不在127标准ASCII码的范围里,我猜想,是不是输出的ASCII值255的符号呢?(由于128~255对应字符 是基于不同平台会有区别,所以我才在我的ASCII码表里找不到对应字符对吗?)
最佳答案
  • 五星知识达人网友:山有枢
  • 2021-02-07 16:52
ASCII是美国国家标准规定的7位字符内码存储标准,转化为整数的范围为0~127,二进制11111111没有对应的ASCII。
如果问11111111对应的整数表示是多少,那么可以有答案。ANSI兼容内码方案扩展的ASCII中,第8位为1的字符不是ASCII字符,而它们的整数值取决于char是否有符号(包括char在在内的单字节有符号整数类型,第8位为符号位)。虽然char、signed char、unsigned char是三种不同的类型,但其中char和另外某一种类型的算术运算行为一致。有些平台上char类似于signed char(11111111转化为整数,为十进制-1),有些平台上char类似于unsigned char(11111111转化为整数,为十进制255)。因此除非明确给出运行的平台,这个问题没有定论的。
另外有一点,标准库读入char字符的一些函数,为了容纳可能超出char范围的文件结束符EOF(stdio.h定义的宏,等于-1),返回值是int。EOF转存至char对象中,一般发生截断,保留低8位的11111111。从11111111的这个一般来源角度来说,表示EOF,也就是整数-1。
----
y上两个点(ÿ)确实是ASCII的扩展单字符集ISO 8859-1(Latin-1)里面11111111对应的符号。LZ的程序输出了这个字符,比较有可能的原因就是我上面说的,把EOF用char存储然后输出了。
“由于128~255对应字符 是基于不同平台会有区别,所以我才在我的ASCII码表里找不到对应字符对吗?”
↑的确这和平台相关。准确地说,是和字符集相关,而不同的平台可能默认输出时可能会使用不同的字符集。这并非是ASCII码表中找不到对应字符的原因,因为二进制11111111本来就不是ASCII字符集中的成员。另外,ASCII及其兼容字符集的0~127目前被各个平台默认输出支持,所以不用考虑平台相关性。
====
[原创回答团]
全部回答
  • 1楼网友:摆渡翁
  • 2021-02-07 17:48
c语言没学好么亲, sscanf都不会,顺便练习下vector #include using namespace std; void cmfcdlg2015dlg::onbutton1()  { // todo: add your control notification handler code here cstring str = "3a 46 45 30 35 30 30 30 32 46 46 30 30 46 43 0d 0a"; vector vec; char *m; char *p; int slen = str.getlength(); int ch; m = str.lockbuffer(); p = m; while(*p && p='0' && *p<='9') || (*p>='a' && *p<='z') ) { p++; } while( !((*p>='0' && *p<='9') || (*p>='a' && *p<='z')) ) { p++; } } str.unlockbuffer(); vector::iterator it; cstring  vecarrstr = _t(""); cstring sarrn; for( it = vec.begin(); it != vec.end(); it++ ) { sarrn.format("[%d],", *it); vecarrstr += sarrn; } messagebox(vecarrstr); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯