【问题标题】:Convert int to byte as HEX in C#在 C# 中将 int 转换为 byte 作为 HEX
【发布时间】:2012-08-01 09:49:12
【问题描述】:

我需要通过串口向设备发送一个十六进制字符串,我现在这样做:

byte[] c = new byte[3];
c[0] = 0x57;
c[1] = 0x30;
ComPort.Write(c,0,c.Length );

现在我需要将 int 值(如 30)转换为 c[1] = 0x30,或者将 int 值 34 转换为 c[1] = 0x34。 我希望你明白我的意思。

那么我该如何处理呢?

【问题讨论】:

  • 如果值为100,你会怎么做?
  • 数值在 30 到 39 之间
  • 我不明白这个问题。你能详细说明一下吗?
  • 是否有另一种通过串口发送 HEX 命令的方法我刚刚发现我可以通过 'byte[] c = new byte[3]' 然后使用 ComPort.Write(c ,0,c.Length );
  • 您应该将输入更改为例如48 比 30 所以你得到 0x30。

标签: c# hex int byte


【解决方案1】:

这种格式称为binary-coded decimal。对于两位数,整数除以 10 并乘以 16,然后将除以 10 的余数加回:

int num = 45;
int bcdNum = 16*(num/10)+(num%10);

【讨论】:

  • @user1235288 是的,(byte)48 和它的十六进制表示一样 (byte)0x30。
  • 结构体 UInt4nibble 可以让这更直观。然后可以使用new nibble[6] 而不是new byte[3],然后使用0x40x5 而不是0x45
  • int可以包含的n位数字是什么?我的意思是任何数字都可以表示为2字节的十六进制数字?
【解决方案2】:

另一种方法是

c[1] = Convert.ToByte(num.ToString(), 16);

【讨论】:

    【解决方案3】:

    假设 int Data=2821;是通过 COM 端口发送:

    c[0]= Convert.ToByte(data & 0x00FF); 
    
    c[0]= Convert.ToByte(data & 0xFF00) >> 8);
    
    ComPort.Write(c,0,c.Length );
    

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 2011-08-19
      • 2012-01-16
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2012-02-05
      • 2015-12-09
      相关资源
      最近更新 更多