【问题标题】:Concatenate 10 uint8 array elements to 5 uint16 array elements [closed]将 10 个 uint8 数组元素连接到 5 个 uint16 数组元素 [关闭]
【发布时间】:2020-06-22 09:24:30
【问题描述】:

假设我有一个类似的数组:

uint8 myorigin_array[10] = {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA}

我想将第一个元素与第二个元素、第三个元素与第四个元素等连接起来……最后有一个 uint16 数组,如:

uint16 myconcatenated_array[5] = {0X0102,0X0304,0X0506,0X0708,0X90A}

使用连接方法在循环中执行此操作的最快方法是什么 (b1

【问题讨论】:

  • 在您的示例中实际上是 b1 * 10 + b2。
  • 这不是在基数 10 中附加数字的串联
  • 您无法通过连接两个 8 位字节的值 12 来获得 12。那么你真正想要的连接值是什么?它可以是0x01020x0201,这取决于你想要什么。

标签: c arrays concatenation


【解决方案1】:

你可以做一些类似的事情

#include<stdio.h>
#include<stdint.h>

int main()
{
    uint8_t arr[]={1,2,3,4,5,6,7,8,9,0},carr[5],i=0;

    for(i=0;i<5;i++)
        carr[i]=(arr[(i*2)]*10)+arr[((i*2)+1)];

    for(i=0;i<5;i++)
        printf("%d\n",carr[i]);
}

编辑:

#include<stdio.h>
#include<stdint.h>

int main()
{
    uint8_t arr[]={0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA};
    int carr[5],i=0;

    for(i=0;i<5;i++)
        carr[i]=((arr[(i*2)]<<8)|arr[((i*2)+1)]);

    for(i=0;i<5;i++)
        printf("%#X\n",carr[i]);
}

注意:uint8_t 不能存储

       0X0102,0X0304,0X0506,0X0708,0X90A

它的范围是 0 到 255(即)0x0 到 0xFF

【讨论】:

  • 谢谢!是的,我知道这一点。因此,我将它们存储到 uint16 值,这些值转到 0xffff
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2022-07-06
  • 1970-01-01
相关资源
最近更新 更多