我和cin.get()有点问题
在获取char时,我将其转换为int,但是当我通过console输入它时,结果与它在代码中已经设置的结果不同。
下面是一个例子:
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()的结果相同。
发布于 2012-07-27 03:36:24
源文件和控制台输入正在经历两个不同的过程来解释字符并将其转换为代码。第一个是输入到文本编辑器中并由编译器转换,第二个是由操作系统和控制台库解释。
值242对应于ISO/IEC 8859-2或Windows 1250代码页中的字符。
我不确定值229从何而来,但几乎可以肯定的是,这是因为使用了不同的代码页来为字符赋值。例如,也许是code page 852。
发布于 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。
发布于 2012-07-27 03:40:13
问题是字符ň不是ASCII码,因此没有ASCII码。
当给定一个非ASCII码的字符时,PHP ord()和C++ ord()都会产生未定义的结果。
https://stackoverflow.com/questions/11676459
复制相似问题