【发布时间】:2020-07-29 06:45:46
【问题描述】:
我知道有很多与此相关的问题,但它们仍然没有解决我的问题。下面是我的字节数组:
你可以看到字节是28,每个4-byte值代表一个值,即我有一台客户端机器向我发送2.4,在读取它时,它会被转换为字节。
//serial port settings and opening it
var serialPort = new SerialPort("COM2", 9600, Parity.Even, 8, StopBits.One);
serialPort.Open();
var stream = new SerialStream(serialPort);
stream.ReadTimeout = 2000;
// send request and waiting for response
// the request needs: slaveId, dataAddress, registerCount
var responseBytes = stream.RequestFunc3(slaveId, dataAddress, registerCount);
// extract the content part (the most important in the response)
var data = responseBytes.ToResponseFunc3().Data;
我想做什么?
将每个 4 字节一一转换为十六进制,将它们保存在单独的变量中。喜欢
hex 1 = byte[0], hex2 = byte[1], hex3 = byte[2], hex4 = byte[3] ..... hex28 = byte[27]组合 4 字节十六进制值,然后将它们转换为浮点数,并为它们分配一个变量来保存浮点值。喜欢
v1 = Tofloat(hex1,hex2,hex3,hex4);// 假设 ToFloat() 是一个函数。
我怎样才能实现它?
【问题讨论】:
-
你的意思是像:
var bytes = new byte[] { 64, 25, 153, 154 }.Reverse().ToArray(); float value = BitConverter.ToSingle(bytes, 0);? -
@Jimi,为什么需要调用
.Reverse()? -
@simon-pearson 不同的字节序。来源是 BigEndian(或者只是以这种方式发送,它可以是协议的一部分,通常记录在案)。当然,你可以检查
BitConverter.IsLittleEndian来测试当前上下文的字节序。
标签: c# arrays floating-point hex