问题在转换的sprintf到C#

问题描述:

我有此线我需要写在C#问题在转换的sprintf到C#

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

hbufferuchar阵列。

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

请帮助...

检查,如果这个工程:

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])); 
+0

hBuffer的每个字节转换为与第二个例子中一样,字符串效率较低。第一个例子会给你更好的性能,特别是如果你多次这样做,通过不垃圾垃圾收集器。 – 2011-01-11 13:36:05

您正在寻找String.Format方法。

Composite Formatting:本页讨论如何使用string.Format()函数。