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

发布于 2024-10-11 07:28:35 字数 316 浏览 5 评论 0原文

我需要用 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# 中,我在字节数组中有相同的数据,我需要实现这一行...

请帮助...

i have this line I need to write in C#

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

hbuffer is a uchar array.

In C# I have the same data in a byte array and I need to implement this line...

Please help...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

后来的我们 2024-10-18 07:28:35

检查这是否有效:

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

Check if this works:

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

This is another option but less efficient:

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"));

Converting each byte of hBuffer to a
string, as in the second example, is
less efficient. The first example will
give you better performance,
especially if you do this many times,
by virtue of not spamming the garbage
collector.

[From the top of my head] In C/C++ %2.2X outputs the value in hexadecimal using upper case letters and at least two letters (left padded with zero).

In C++ the next example outputs 01 61 in the console:

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

Using the information above, the following C# snippet outputs also 01 61 in the console:

byte[] test = { 0x01, (byte) 'a' };
Console.WriteLine(String.Format("{0:X2} {1:X2}", test[0], test[1]));
梦太阳 2024-10-18 07:28:35

复合格式:本页讨论如何使用字符串。 Format() 函数。

Composite Formatting: This page discusses how to use the string.Format() function.

思慕 2024-10-18 07:28:35

您正在寻找 String.Format 方法。

You are looking for String.Format method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文