【问题标题】:How to make concatenation between 4 bytes?如何在 4 个字节之间进行连接?
【发布时间】:2016-11-27 18:25:22
【问题描述】:

我有 4 个字节:

buffer_RX[3]= \x70;
buffer_RX[4]= \xb4;
buffer_RX[5]= \xc5;
buffer_RX[6]= \x5a;

我想连接它们以获得这样的表示 0x70b4c55a:

我已经这样做了plaintext[1]= (rx_buffer[3]<<8)|rx_buffer[4]; 这是我得到的结果:70b4

plaintext[1]= (rx_buffer[3]<<8)|(rx_buffer[4]<<8)|(rx_buffer[5]<<8)|rx_buffer[6]

它不起作用。 请我需要帮助。

【问题讨论】:

  • 将每个“8”分别更改为“24”、“16”和“8”。
  • 移动它们更多。您将三个值 ORRed 到同一个地方。而plaintext[1] 需要是 32 位无符号值。
  • 不清楚你所说的“有这样的代表”是什么意思。您尝试编写的代码会产生 value 0x70b4c55a;其表示方式取决于您的平台。
  • 是的,我需要得到 0x70b4c55a 的结果。

标签: c


【解决方案1】:

这是一种方法:

plaintext[1] = (buffer_RX[3] << 24) |
               (buffer_RX[4] << 16) |
               (buffer_RX[5] << 8) | buffer_RX[6];

【讨论】:

  • @nani92 :是的,它有效,但你现在明白为什么了吗?学习这也许比没有解释地给出答案更重要。
【解决方案2】:

您必须了解每个字节是 8 位,因此 4 个字节是 32 位。第一个示例有效,因为您仅使用 16 位和两个字节,要使用 32 位和四个字节,您必须将每个字节分别移动 24、16、8 和 0 位,以便将其放置到正确的位置。

plaintext[1]= (rx_buffer[3] << 24 ) | 
              (rx_buffer[4] << 16) |
              (rx_buffer[5] << 8) |
               rx_buffer[6] ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多