【问题标题】:how to convert char array of low and high bytes to int array of them , without using loop?如何在不使用循环的情况下将低字节和高字节的 char 数组转换为 int 数组?
【发布时间】:2019-01-30 19:47:12
【问题描述】:

我有一个这样排列的 uchar 数组:

uchar a={LowByte_val1 HighByte_val1 LowByte_val2 HighByte_val2 ...};

如何将此数组转换为(无循环)

uint b= [val1 val2 ...];

在哪里

val1 = LowByte_val1+(HighByte_val1<<8);

我使用这个解决方案。

typedef union {
           struct { 
                    uchar lsb; 
                    uchar msb; 
                  }byteModel;
         unsigned int data; 
   }XXX;

uchar a[24]={0,0,0,1,0,2,0,3, 1,0,1,1,1,2,1,3, 2,0,1,1,2,2,2,3}; 
XXX *input = new XXX[12];

然后:

memcpy(input,a,24);

但没有工作:(。

【问题讨论】:

  • 你能详细说明为什么没有循环吗?只是好奇,因为这听起来有点武断。
  • memcpy 使用循环。
  • 似乎你假设int 是 16 位,这是非常罕见的,更没有保证。

标签: c++


【解决方案1】:

你可以使用:

char c[size];
int *i = (int*)c;

这将允许您访问与 int 和 char 相同的数据。

但请记住(我确信您已经这样做了)int 和 char 的大小不同。 int 数组会更“短”。

编辑:有人指出这仅适用于小端架构。如果你需要一个大端的解决方案,我会指给你this tutorial。如果您不知道其中任何一个是什么,我将您指向this question 和上面的教程。

【讨论】:

  • 如果安排是:uchar a={HighByte_val1 LowByte_val1 HighByte_val2 LowByte_val2 ...}; ??????
  • @user2087181 耶!我很高兴。
  • @OznOg 请解释一下。 “小端拱”是什么意思?我可以在某处读到它吗?
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 2022-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
相关资源
最近更新 更多