C++:读取字符是不正确的

C++: Reading a character is incorrect

本文关键字:不正确 字符 读取 C++      更新时间:2023-10-16

在C++中尝试从文本文件读取字符时遇到一个奇怪的问题。当它找到一个撇号(十六进制92(时,它会将其读取为多个字符。对于字符串"它是",我得到这个:

i - 69
t - 74
’ - ffffff92
s - 73
it’s

这是代码:

{
FILE* fp = fopen("word.txt", "rb");
char buf[111];
fscanf(fp, "%s", buf);
for (int i = 0; i < strlen(buf);   ++i)
printf("%c - %xn", buf[i], buf[i]);
printf(buf);
}

打开为"r"会得到相同的结果。我怎么能把撇号读成单个字符呢?谢谢

将buf[i]强制转换为无符号字符-字符读取正确-但在打印时-由于它是负数-它被扩展为int,然后大小写为无符号int,因此您可以看到ffffffff 92-强制转换为未符号字符应能正确显示值

#include<cstdio>
int main() {
char ch = static_cast<char>(0x92);
printf("%c - %x/%xn", ch,ch,static_cast<unsigned char>(ch));
return 0;
}

输出

$ ./test
� - ffffff92/92