在C#中将十六进制打印为十六进制?

时间:2014-12-16 12:08:54

标签: c# serial-port byte hex

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

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

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

如果我指定bytes[0] = 0xF2;硬件是否会以十六进制理解它,即使Console.WriteLine();显示不同也会测试?

2 个答案:

答案 0 :(得分: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)

我的建议是仔细检查设备的文档,找出预期的确切格式。

答案 1 :(得分:0)

  

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

是的,因为0xF2仍然是242。它只是一个hexadecimal notation。此符号中的大多数comman前缀为0x。即使您使用调试器,也可以看到它是decimal notation

enter image description here

  

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

不,Console.WriteLine() method这里什么也没做。

  

C#如何跟踪内部存在十六进制值   诠释?

int 中没有十六进制值这样的东西。它只是一个notation

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

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

如果你想获得前缀;你可以做;

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