我正在尝试将整数值用于其对应的ASCII字符:
char c = char(65); //65 equivalent to A character
MessageBox::Show(System::Convert::ToString(c), "Conversion",
MessageBoxButtons::OK, MessageBoxIcon::Error);
此方法只在消息框中显示“65”而不是字符A.是否有任何方法可以在C ++ / CLI中显示字符而不是数字?我尝试了其他多种方法,但它们似乎没有用。
答案 0 :(得分:1)
这是一个C ++和.Net类型与您期望的方式不匹配的问题。
在.Net中,字符有一个不同的类型:System::Char
,如果你有Char
,则只有using namespace System;
。 (请注意首都" C",这很重要。)这是System::UInt16
或System::Int16
的不同类型,即使它的大小相同。
在C ++中,char
和unsigned char
是最小的类型。单字节字符与单字节整数之间没有区别。
将C ++类型映射到.Net类型时,char
映射到System::Byte
,这是一种数字类型。这就是为什么你得到一个包含单词" 65"在你的转换中。
如果你想要一些.Net认可的字符而不是数字,那么你需要转换为Char
(使用大写" C"使其成为System::Char
)。然后你可以致电.ToString()
来获得" A"而不是" 65"。
我的测试程序:
int main(array<String^>^ args)
{
char native = (char)65;
Debug::WriteLine(native.ToString());
Char c = (Char)65;
Debug::WriteLine(c.ToString());
return 0;
}
结果:
65 A