节字符 (§) 溢出字符类型 (C++)



尝试定义字符时:

char q = '§';

clion抛出一个错误:";字符太大,无法包含字符文字类型";。这很奇怪,好像我查了§的ascii转换,它只有167。

如果我使用:

char c;
std::string q = "§";
for (char el:q) {
c = el;
std::cout << c;
}

输出为:┬º

和:

int c;
std::string q = "§";
for (char el:q) {
c = (int) el;
std::cout << c;
}

输出:-62-89

因此,字符似乎溢出了字符类型

在这种情况下,我使用未受质疑的long-long-int而不是int来实现RSA加密,并且仍然会发生溢出,从而破坏解密的数据。如何将此字符和可能溢出字符类型的其他字符转换为各自的ascii值(对于本例(char("§"应返回167(。

无符号长整型转换:

#define ull unsigned long long int
int main() {
ull c;
std::string q = "§";
for (char el:q) {
c = (ull) el;
std::cout << c;
}
}

输出:1844674407370955155418446744073709551527

使用wchart也没有解决这个问题。

绕过它的一种方法是使用unicode字符串:

auto q = u"u00A7";

Unicode字符串(u表示16位,U表示32位(通常可以与普通的std::string类型类似地使用,但当您对其进行迭代或索引时,您将拥有相应的字符类型:char16_tchar32_t

最新更新