尝试定义字符时:
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_t
或char32_t
。