Kin*_*pin 6 .net c# bytearray bcd
我想使用BCD将int转换为byte [4]数组.
有问题的int将来自设备ID,他需要通过serialport与设备通话.
是否有任何预制功能可以做到这一点,或者你能给我一个简单的方法吗?
例:
int id= 29068082
Run Code Online (Sandbox Code Playgroud)
输出:
byte[4]{0x82, 0x80, 0x06, 0x29};
Run Code Online (Sandbox Code Playgroud)
使用此方法.
public static byte[] ToBcd(int value){
if(value<0 || value>99999999)
throw new ArgumentOutOfRangeException("value");
byte[] ret=new byte[4];
for(int i=0;i<4;i++){
ret[i]=(byte)(value%10);
value/=10;
ret[i]|=(byte)((value%10)<<4);
value/=10;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
这基本上就是它的工作原理.
(一个优化是预先将每个字节设置为0 - 这是由.NET在分配新数组时隐式完成的 - 并在值达到0时停止迭代.后面的优化不在上面的代码中完成,因为此外,如果可用,一些编译器或汇编器提供了一个除法/余数例程,允许在一个除法步骤中检索商和余数,这是一种通常不需要的优化.)