什么是.NET中String.Format的%c等效?

时间:2015-07-14 15:45:56

标签: .net c++-cli

我试图找到一种方法用.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);

我得到了;

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

所以'Char'而不是'char'似乎正在发挥作用。

1 个答案:

答案 0 :(得分:0)

char关键字在C和C ++语言中保留其原始含义,它是MSVC ++中的8位类型,.NET Framework没有等效的字符类型,因此String :: Format()处理它就像System :: SByte的别名。一个整数类型,因此您可以看到整数值而不是字符。

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