如何将1字节数组元素转换为2字节?求正确实现方案
1字节元素转2字节存储的正确实现
原代码存在的问题
- 循环逻辑错误:
j<2的条件仅限制了两次赋值,无法遍历整个原数组的所有元素 - 赋值操作覆盖:先给
arr_2[j]赋值高四位,紧接着又对arr_2[j++]赋值低四位,导致高四位的赋值被直接覆盖,最终只保留了低四位数据 - 数组大小逻辑错误:原数组
arr[size]包含size个1字节元素,转换后的arr_2需要2*size的空间才能存储所有拆分后的2字节数据,而非和原数组同大小
正确实现代码
以C语言为例,假设原数组arr长度为size,目标数组arr_2长度为2*size:
int i, j = 0; for(i = 0; i < size; i++){ // 提取高4位,右移4位后得到对应高位值 arr_2[j++] = (arr[i] & 0xF0) >> 4; // 提取低4位,直接得到对应低位值 arr_2[j++] = arr[i] & 0x0F; }
代码说明
- 遍历原数组的每个元素,对每个元素分别提取高4位和低4位
- 先将高4位存入
arr_2的当前位置,再将低4位存入下一个位置,通过j++依次推进目标数组的索引 - 确保目标数组
arr_2的空间足够,避免越界访问
内容的提问来源于stack exchange,提问作者Bhushan Mahajan
相关产品推荐
相关产品推荐

