【问题标题】:Convert To (48 bits, Little Endian)转换为(48 位,Little Endian)
【发布时间】:2021-02-15 10:05:49
【问题描述】:

我正在通过 UDP 与卡通信,发送消息并接收带有我想要的数据的响应! 我在这两个参数的转换中遇到了一个小问题: Paremeters Argument

当我发送命令 0x22 来读取固件版本时,我得到了这个响应(索引 3、4、5),但它们不是 yymmdd 格式,因为我得到了 38 和 33 的结果...... 0x22 Reponse

当我发送命令 0x21 读取 UI 版本时 我得到了这个结果,我如何将它转换为 48 位小端 0x21 Réponse

【问题讨论】:

  • int serialNumber = byte1 + 256 * byte2 + (256*256 * byte3) + ... + (256*256*256*256*256 * byte6)
  • 看看docs.microsoft.com/en-us/dotnet/api/…——标准字节序转换。
  • 错误编译器 L'opération engendre un dépassement de capacité au moment de la compilation dans le mode check @xanatos
  • @QuatreHuit 啊对...48位...你需要64位...long serialNumber = byte1 + 256L * byte2 + (256L*256L * byte3) + ... + (256L*256L*256L*256L*256L * byte6)。使用long并在每个256后放一个L,这样操作就在long中完成

标签: c# type-conversion endianness


【解决方案1】:

最简单的方法是这样的:

long serialNumber = byte1 + (256L * byte2) + (256L*256L * byte3) + ... + (256L*256L*256L*256L*256L * byte6)

请注意,当然可以通过位移来做到这一点:

long serialNumber = ((long)byte1) | ((long)byte2 << 8) | ((long)byte3 << 16) | ... | ((long)byte6 << 40)

两者都基于小端数在内存中的表示方式。

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多