%c对String的等价是什么?. net格式



我试图找到一种方法,在。net语言的printf样式函数中移植"%c"格式,但失败了。例如,我怎么写:

char code = 'a';
sprintf(text,"oops! %c",code);

在c++/CLI我尝试了一些,但他们没有给我'a'!

编辑:

首先,我尝试将一些值格式化为字符'a'或'b'或'c'…环境是VisualStudio 2008, CLI/CPP, . net 3.5。我写了测试代码来展示我所做的。

String^ text;
char    charC = 'a';
text = String::Format("(1) Oops! {0}",charC);
OutputDebugString(text);
char    charV = 1;
text = String::Format("(2) Oops! {0}",charV + 0x60);
OutputDebugString(text);
text = String::Format("(3) Oops! {0}",(char)(charV + 0x60));
OutputDebugString(text);
int intV = 1;
text = String::Format("(4) Oops! {0}",(char)(intV + 0x60));
OutputDebugString(text);

结果和我预期的不一样。

(1) Oops! 97
(2) Oops! 97
(3) Oops! 97
(4) Oops! 97

上面的代码似乎与其他人建议的代码工作方式不同。我感到很抱歉,我应该在第一次就详细说明我所做的事情。

如果我们只有{0}来格式化变量,我们没有选择将它变成像'a'这样的字符或像'97'这样的数字。我没有得到"a",我想问一下怎么做。

EDIT2:

根据注释的建议,我将'char'更改为'char',像这样;

String^ text;
Char    charC = 'a';
text = String::Format("(1) Oops! {0}",charC);
OutputDebugString(text);
Char    charV = 1;
text = String::Format("(2) Oops! {0}",charV + 0x60);
OutputDebugString(text);
text = String::Format("(3) Oops! {0}",(Char)(charV + 0x60));
OutputDebugString(text);
int intV = 1;
text = String::Format("(4) Oops! {0}",(Char)(intV + 0x60));
OutputDebugString(text);

And I got;

(1) Oops! a
(2) Oops! 97
(3) Oops! a
(4) Oops! a

所以'Char'而不是'Char'似乎可以工作。

char关键字在C和c++语言中保持其原始含义,它是msvc++中的8位类型,. net框架没有等效的字符类型,因此String::Format()将其视为System::SByte的别名。整型,因此您看到的是整数值而不是字符。

。. NET使用utf-16编码的Unicode, System::Char是一个16位类型。在msvc++中,匹配wchar_t关键字。可以直接使用,也可以用Char代替char

最新更新