将sprintf转换为C#时出现问题

时间:2011-01-10 21:49:26

标签: c# string formatting printf

我有这条线,我需要用C#写

sprintf(
  currentTAG,
  "%2.2X%2.2X,%2.2X%2.2X",
  hBuffer[ presentPtr+1 ],
  hBuffer[ presentPtr ],
  hBuffer[ presentPtr+3 ],
  hBuffer[ presentPtr+2 ] );

hbuffer是一个uchar数组。

在C#中,我在字节数组中有相同的数据,我需要实现这一行......

请帮忙......

3 个答案:

答案 0 :(得分:2)

Composite Formatting:此页面讨论了如何使用string.Format()功能。

答案 1 :(得分:2)

检查是否有效:

byte[] hBuffer = { ... };
int presentPtr = 0;
string currentTAG = string.Format("{0:X2}{1:X2},{2:X2}{3:X2}",
                          hBuffer[p+1],
                          hBuffer[p],
                          hBuffer[p + 3],
                          hBuffer[p + 2]);

这是另一种选择,但效率较低:

byte[] hBuffer = { ... };
int presentPtr = 0;
string currentTAG = string.Format("{0}{1},{2}{3}",
                          hBuffer[p+1].ToString("X2"),
                          hBuffer[p].ToString("X2"),
                          hBuffer[p + 3].ToString("X2"),
                          hBuffer[p + 2].ToString("X2"));
  

将hBuffer的每个字节转换为   字符串,如第二个例子中所示   效率低下。第一个例子是   给你更好的表现,   特别是如果你多次这样做,   由于没有垃圾邮件   收集器。

[从我的脑海开始] 在C / C ++ %2.2X中使用大写字母和至少两个字母(左边用零填充)输出十六进制值。

在C ++中,下一个示例在控制台中输出01 61

unsigned char test[] = { 0x01, 'a' };
printf("%2.2X %2.2X", test[0], test[1]);

使用上述信息,以下C#代码段也会在控制台中输出01 61

byte[] test = { 0x01, (byte) 'a' };
Console.WriteLine(String.Format("{0:X2} {1:X2}", test[0], test[1]));

答案 2 :(得分:0)

您正在寻找String.Format方法。