字符串格式化和十六进制字符

6

有人能解释一下为什么这个不行吗:

string f = string.Format("\\x{0:00}{{0}}", 5);
string o = string.Format(f, "INSERT TEXT");
System.Diagnostics.Debug.WriteLine(f + " : " + o);

输出结果如下:

\x05{0} : \x05INSERT TEXT

为什么\x05没有被替换?

字符不是十六进制或其他任何东西,您想输出一个对应于值5的字符,也表示为\x05。您应该将Lister先生的答案标记为正确答案,因为它解决了您的问题。 - Jaap
3个回答

10

参数的格式应该在格式说明符中设置,否则你只是插入了一个字面的 "\x"。像这样:

// "5" as a lowercase 2-digit hex
string f = string.Format("{0:x2}{{0}}", 5);

不要混淆在源代码中表示十六进制字面量和在格式化字符串中打印的内容,它们是不同的东西。


但这会给我一个字符串“05”。我试图在字符串中获取单个十六进制字符\x05,但我无法将其作为文字输入,因为它必须来自变量(示例中硬编码了5,实际上是int变量)。这就是为什么我先尝试设置格式字符串的原因。 - user380689
1
@user:您希望它如何显示?当以十六进制形式获取数字时,您只会得到数字,没有“0x”前缀。如果您希望包括这些前缀,则需要自己添加。 - Jeff Mercado

7

如果要在字符串中放置一个字符,请确保编译器知道这是一个字符。

string f = string.Format("{0}", (char)5);
string g = string.Format("{0}", Convert.ToChar(5));
string h = string.Format("{0}", char.ConvertFromUtf32(5));

或者你可以从一个真正的字符开始:

string i = string.Format("{0}", '\x05');
string j = string.Format("{0}", '\u0005');
string k = string.Format("{0}", '\U00000005');

选你所爱。

0

这是你需要的吗?

  int x = 5;
  string f = string.Format("\\x{0:x2}{1}", x, "INSERT TEXT");
  Console.WriteLine(f);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接