我正在建立要通过蓝牙通信的字节数组。这些字节部分是根据枚举类型构建的,例如:

public enum Motor
{
   A = 0x00,
   B = 0x01,
   C = 0x02,
   AB = 0x03,
   AC = 0x04,
   BC = 0x05,
}


稍后在我的代码中,我创建一个名为MyMotor.B的变量MyMotor。然后,我将此变量传递给构建字节数组的方法。

我的问题是,我通过蓝牙与之通信的软件期望枚举值的十六进制值为字符串,即MyMotor.B =字节0x01 = dec 1 =十六进制31。但是将MyMotor直接转换为char会导致它计算其枚举值,即MyMotor = B = hex 42。

由于种种原因,我无法更改我的受启发列表,因此,我选择了两行代码的代码,它们看起来非常骇人听闻:

String motorchar = Convert.ToString(Convert.ToInt32(MyMotor)); // convert to temp var
command[5] = (byte)(motorchar[0]); // store hex value of var


它按我的意愿运行,即command [5] = hex31

我想知道是否有更好的方法。我发现的所有文章都涉及处理整个字节数组,而不是处理单个字节和字符。

最佳答案

chars[0] = (char)('0' + ((byte)myMotor & 0x0F));
chars[1] = (char)('0' + (((byte)myMotor & 0xF0) >> 4));


不过,这需要对十六进制进行更多调整。

10-02 05:49