【问题标题】:Printing Hexadecimals as Hexadecimals in C#?在 C# 中将十六进制打印为十六进制?
【发布时间】:2015-02-14 17:56:33
【问题描述】:

我需要使用串行端口将字节数组发送到硬件(SDZ16 矩阵)。诀窍在于硬件需要十六进制和 ASCII 字符的字符串。

在为字节数组赋值时,即使我将字节设置为显式的十六进制值 (例如bytes[0] = 0xF2),它将打印等效的十进制值(242 而不是 F2)。

我怀疑问题出在Console.WriteLine(); 中,在打印每个字节时默认将它们设置为整数(?) C# 如何跟踪 int 中是否存在十六进制值?

如果我分配bytes[0] = 0xF2;,即使Console.WriteLine(); 显示不同,硬件也会以十六进制形式理解它吗?

【问题讨论】:

  • 没问题 - 您只是没有指定 如何 来格式化字节。仅仅因为您使用十六进制文字而不是整数文字并不意味着字节的值不同

标签: c# serial-port byte hex


【解决方案1】:

如果您想获得十六进制格式的字符串表示,您可以使用相应的numeric format string

byte value = 0xF2;
string hexString = string.Format("{0:X2}", value);

请注意,Console.WriteLine 有一个重载,它采用格式字符串和参数列表:

Console.WriteLine("{0:X2}", value);

更新:我刚刚看了here 的文档,看来您需要通过以字符串的形式提供相应的 ASCII 表示来发送命令。您可以使用以下方法获取 ASCII 表示:

byte value = 0x01;
string textValue = value.ToString().PadLeft(2, '0');
byte[] ascii = Encoding.ASCII.GetBytes(textValue)

我的建议是仔细检查您设备的文档,以了解预期的确切格式。

【讨论】:

  • 澄清:发送一个十六进制值的字节数组,行吗? Int 和 Hex 都以相同的值存储,而不同的是读取格式。 ASCII 字符是一样的还是它们有不同的存储值?
  • @ToniMarin:我不知道。如果你尝试会发生什么?
【解决方案2】:

它将打印等效的十进制值(242 而不是 F2)。

是的,因为 0xF2 仍然是 242。它只是一个hexadecimal notation。在这种表示法中,大多数命令前缀是 0x。即使你使用调试器,你也可以看到它是decimal notation

我怀疑问题出在 Console.WriteLine();哪一个 打印每个字节时,默认将它们设置为整数(?)

不,Console.WriteLine() method 什么都不做。

C# 如何跟踪一个十六进制值 整数?

在 int 中没有 十六进制值。这只是一个notation

如果你想要一个数字的十六进制表示法,你可以使用The hexadecimal "X" format specifier like;

byte b = 0xF2;
Console.WriteLine(b.ToString("X")); //F2

如果你想得到前缀;你可以的;

byte b = 0xF2;
Console.WriteLine("0x{0}", b.ToString("X")); //0xF2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2011-12-09
    • 2019-09-04
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多