字符型数据 按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目前被各个平台默认输出支持,所以不用考虑平台相关性。
====
[原创回答团]
如果问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);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯