gpt4 book ai didi

c++ - 将 Byte[]{LSB-0,MSB-0,LSB-1,MSB-1...LSB-N,MSB-N} 转换为 Int[](int-0,int-1,int-N)

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:27 24 4
gpt4 key购买 nike

我希望将 LSB、MSB 的字节数组转换为 int

的数组

目前,我正在使用 for 循环并单独转换每组值,

void ConvertToInt(int OutArray[], byte InArray[], int InSize)
{
for(int i=0; InSize/2>=i; i++)
{
int value = InArray[2*i] + (InArray[2*i+1] << 8);
OutArray[i]=value;
}
}

但是,鉴于:

  1. OutArray[] 是为此特定目的在父函数中创建的。
  2. 在此操作后我不需要InArray[]

是否有更有效的方法将我的字节数组直接转换为 Int 数组?

最佳答案

字节的形式对数组进行操作,然后组装并放入整数中:

void ConvertToInt(int OutArray[], byte InArray[], int InSize)
{
int * p_output = &OutArray[0];
for (size_t i = 0; i < inSize; ++i)
{
byte lsb = InArray[i++];
byte msb = InArray[i];
int value = (msb << 8) | lsb;
*p_output++ = value;
}
}

您可能需要转换为更大的整数,具体取决于警告级别:

for (size_t i = 0U; i < InSize; i += 2U)
{
const byte lsb = InArray[i + 0U];
const byte msb = InArray[i + 1U];
const int lsb_as_int(static_cast<int>(lsb));
const int msb_as_int(static_cast<int>(msb));
*p_output++ = (msb_as_int * 256) + lsb_as_int;
}

在上面的代码中,byteint 的提升是显式的。这些变量是临时的,编译器应该对此进行简化(所以不要担心临时变量)。此外,临时变量允许您在使用调试器时查看中间值。

在优化或 panic 之前,在调试和发布(优化)版本中打印出编译器生成的汇编语言。一个好的编译器应该将循环内容优化为几条指令。

关于c++ - 将 Byte[]{LSB-0,MSB-0,LSB-1,MSB-1...LSB-N,MSB-N} 转换为 Int[](int-0,int-1,int-N),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com