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

C++ cin.get()ASCII代码与代码中已设置字符的ASCII代码不同,c++,C++,我的cin.get()有问题。: 在获取字符时,我将其转换为int,但当我通过控制台输入它时,结果与代码中已设置的结果不同 下面是一个例子: 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)<

我的
cin.get()有问题。

在获取字符时,我将其转换为int,但当我通过控制台输入它时,结果与代码中已设置的结果不同

下面是一个例子:

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 
}
int-ord(无符号字符chr){
int-ret=int(chr);
返回ret;
}
int main(){
unsigned char chr='ň';//这是我现在的常量字符'ň'

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

值242对应于或代码页中的字符


我不确定值229来自何处,但几乎可以肯定的是,这是因为使用了不同的代码页来为字符赋值。例如。

问题在于,您的控制台正在从中读取字符,其中
ň
在代码点229(0xE5)处编码,但您希望它的值为(又称拉丁语-2),其中,
ň
在代码点242(0xF2)处编码

我强烈建议您放弃这种方法,只使用Unicode,而不存在这些类型的问题。处理非Unicode编码,如ISO 8859变体和DOS代码页,只会让您头疼不已

要使用Unicode数据,.在Unicode中,
ň
是代码点U+0148


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

问题在于字符
ň
不是ASCII字符,因此没有ASCII代码


php <代码>()(代码)>和C++ >代码>

当给定一个非ASCII字符时,承诺未定义的结果。

我猜229字符是在控制台窗口中使用OEM代码页852时产生的。@MichaelBurr,我自己刚刚发现了这一点。这需要大量的尝试和错误。控制台窗口使用这一点是有道理的。我尝试了这个脚本以获得我的a字符集应用程序用途:cout@DieMeine输入的编码不是由C++环境决定的,它是由CMD窗口决定的。有一个<代码> CHCP < /Cord>命令,但是我不知道它有多好。它是有效的,但是只是部分地。当我把CHCP变成1250,我按下键盘上的“i”,CIN。,但当我将控制台输出(˛)标记并复制到这里时,它会粘贴到这里:DI尝试使用wstring和wchar__t,正如在那里编写的那样,所以我用wcout替换cout,用wcin替换cin,还添加了这些头,但结果仍然相同-229