我正在建立要通过蓝牙通信的字节数组。这些字节部分是根据枚举类型构建的,例如:
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));
不过,这需要对十六进制进行更多调整。