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

C# 将sprintf转换为C时出现的问题#,c#,string,formatting,printf,C#,String,Formatting,Printf,我有一行需要用C写# hbuffer是一个uchar数组 在C#中,我在字节数组中有相同的数据,我需要实现这一行 请帮助…您正在寻找方法。您正在寻找方法。:本页讨论如何使用string.Format()函数。本页讨论如何使用string.Format()函数。检查此功能是否有效: byte[] hBuffer = { ... }; int presentPtr = 0; string currentTAG = string.Format("{0:X2}{1:X2},{2:X2}{3:X2}",

我有一行需要用C写#

hbuffer
是一个
uchar
数组

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

请帮助…

您正在寻找方法。

您正在寻找方法。

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

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

检查此功能是否有效:

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 < /C> >:

unsigned char test[] = { 0x01, 'a' };
printf("%2.2X %2.2X", test[0], test[1]);
byte[] test = { 0x01, (byte) 'a' };
Console.WriteLine(String.Format("{0:X2} {1:X2}", test[0], test[1]));
使用上述信息,以下C#代码段在控制台中也会输出
01 61

unsigned char test[] = { 0x01, 'a' };
printf("%2.2X %2.2X", test[0], test[1]);
byte[] test = { 0x01, (byte) 'a' };
Console.WriteLine(String.Format("{0:X2} {1:X2}", test[0], test[1]));
检查这是否有效:

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 < /C> >:

unsigned char test[] = { 0x01, 'a' };
printf("%2.2X %2.2X", test[0], test[1]);
byte[] test = { 0x01, (byte) 'a' };
Console.WriteLine(String.Format("{0:X2} {1:X2}", test[0], test[1]));
使用上述信息,以下C#代码段在控制台中也会输出
01 61

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

如第二个示例所示,将hBuffer的每个字节转换为字符串效率较低。第一个示例将为您提供更好的性能,特别是如果您多次这样做,因为您不会向垃圾收集器发送垃圾邮件。这就是为什么我首先指出了另一种选择。但我在你的评论中添加了一条免责声明,以明确这一点。将hBuffer的每个字节转换为字符串,如第二个示例中所示,效率较低。第一个示例将为您提供更好的性能,特别是如果您多次这样做,因为您不会向垃圾收集器发送垃圾邮件。这就是为什么我首先指出了另一种选择。但我在你的评论中添加了一条免责声明,以明确这一点。