You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#解析串口字节流:提取指定4字节并转换为十进制数

解决方案

步骤说明

  1. 提取目标字节:从接收的7字节数组中,取出索引为2、3、4、5的四个字节(对应示例中加粗的01 0e 0c 00)。
  2. 合并字节为整数:根据串口数据的字节序(通常分为大端/小端,示例需结合设备实际协议确认),将四个字节组合成32位整数。
  3. 输出十进制结果:将合并后的整数直接输出为十进制数值。

修改后的完整代码

// 初始化字节数组存储串口数据
byte[] posBuffer = new byte[7];

// 读取7个字节并打印
for (int i = 0; i < 7; i++)
{
    posBuffer[i] = SP1.ReadByte();
    Console.WriteLine(posBuffer[i]);
}

// 提取目标字节(对应示例中加粗的4个字节)
byte byte1 = posBuffer[2];
byte byte2 = posBuffer[3];
byte byte3 = posBuffer[4];
byte byte4 = posBuffer[5];

// 按大端模式(高位字节在前)合并为32位无符号整数
uint combinedValue = ((uint)byte1 << 24) | ((uint)byte2 << 16) | ((uint)byte3 << 8) | byte4;

// 输出十进制结果
Console.WriteLine($"合并后的十进制值:{combinedValue}");

关于示例结果的补充说明

你提到示例中01 0e 0c 00合并后需得到十进制7872(对应十六进制1ec0),这说明实际字节序或数据有效范围与常规大端模式不符:

  • 若仅需得到0x1EC0(7872),可能是仅取中间两个字节0e和0c,并按小端逻辑合并:(uint)byte3 << 8 | byte2。
  • 若确认四个字节均为有效数据,请检查设备协议的字节序要求,调整合并逻辑。例如小端模式的合并方式为:
    uint combinedValueLittleEndian = ((uint)byte4 << 24) | ((uint)byte3 << 16) | ((uint)byte2 << 8) | byte1;
    

内容的提问来源于stack exchange,提问作者Aleks-CST

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:07:10