首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cin.get() ASCII码与代码中已设置字符的ASCII码不同

cin.get() ASCII码与代码中已设置字符的ASCII码不同
EN

Stack Overflow用户
提问于 2012-07-27 03:14:34
回答 3查看 539关注 0票数 0

我和cin.get()有点问题

在获取char时,我将其转换为int,但是当我通过console输入它时,结果与它在代码中已经设置的结果不同。

下面是一个例子:

代码语言:javascript
复制
int ord(unsigned char chr){
    int ret=int(chr);
    return ret;
}
int main(){
    unsigned char chr='ň'; //This is my constant character 'ň' for now
    cout<<ord(chr)<<endl; //outputs : 242 ,which is alright for me, because it is same as in PHP and that I need
    chr=cin.get(); //now I change my constant character 'ň' to 'ň' written through console 
    cout<<ord(chr)<<endl; //outpus : 229 ,which is wrong for me, because its not same as in PHP 
}

我该如何解决这个问题呢?

我希望得到242,而不是229,它必须与PHP中ord()的结果相同。

EN

回答 3

Stack Overflow用户

发布于 2012-07-27 03:36:24

源文件和控制台输入正在经历两个不同的过程来解释字符并将其转换为代码。第一个是输入到文本编辑器中并由编译器转换,第二个是由操作系统和控制台库解释。

值242对应于ISO/IEC 8859-2Windows 1250代码页中的字符。

我不确定值229从何而来,但几乎可以肯定的是,这是因为使用了不同的代码页来为字符赋值。例如,也许是code page 852

票数 1
EN

Stack Overflow用户

发布于 2012-07-27 03:37:42

问题是您的控制台正在从code page 852读取字符,其中ň在代码点229 (0xE5)编码,但是您希望它的值在ISO 8859-2 (也称为拉丁-2)中,而ň在代码点242 (0xF2)编码。

我强烈建议您放弃这种方法,只使用Unicode,它没有这些类型的问题。处理非Unicode编码,如ISO8859变体和DOS代码页,简直是令人头疼。

要使用Unicode数据,请使用see this question。在Unicode中,ň是代码点U+0148。

此外,这与您的问题无关,但是您的ord()函数是无用的。cin.get()已经返回了一个int,并且unsigned char可以隐式地转换为int

票数 1
EN

Stack Overflow用户

发布于 2012-07-27 03:40:13

问题是字符ň不是ASCII码,因此没有ASCII码。

当给定一个非ASCII码的字符时,PHP ord()和C++ ord()都会产生未定义的结果。

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

https://stackoverflow.com/questions/11676459

复制
相关文章

相似问题

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