Little/Big Endian 移位位置

问题描述 投票:0回答:0

我已经写了一些代码,它存储了一个来自 char 数组 [2304] 的整数

进入一个整数数组,本质上,如果我的字符数组有整数 1000,它存储在 4 个字节

memory_array[0]= 1000 的第一个字节;

memory_array[1] = 1000 的第二个字节;

memory_array[2] = 1000 的第三个字节;

memory_array[3] = 1000 的最后一个字节;

我有一个名为 read_int 的函数,它接受一个索引(存储值的第一个字节)

并返回一个整数,整理所有其他 3 个字节以形成值 1000

现在,我的朋友问我一个问题,

“你必须考虑你使用的字节序系统。如果是小字节序,那么你需要移动每个字节的位置”

我不确定他的意思,我将如何在下面的实现中移动每个字节的位置,以及我如何知道我使用的是什么字节序系统

我的 store int 将一个整数存储到我的 char* 数组中,将它分布在每个字节的 4 个空格中。

  void load(unsigned char* instruction){
   int rd = get_register_to_store_into(instruction,21,25);
   int virtual_rountine_access =
           registers[get_register_to_store_into(instruction,13,17)]
           + extract_typeI_imm(instruction);
   int value = 0;

       registers[rd] = read_int(blob.memory,
                                            virtual_rountine_access);
}

这是我如何从数组中存储和检索的代码

  void store_int(unsigned char* arr, int index, int value) {
    arr[index] = (value >> 24) & 0xFF;
    arr[index+1] = (value >> 16) & 0xFF;
    arr[index+2] = (value >> 8) & 0xFF;
    arr[index+3] = value & 0xFF;
}

int read_int(const unsigned char* arr, int index) {
    int value = 0;
    value |= ((int)arr[index]) << 24;
    value |= ((int)arr[index+1]) << 16;
    value |= ((int)arr[index+2]) << 8;
    value |= ((int)arr[index+3]);
    return value;
}
c bit-shift riscv
© www.soinside.com 2019 - 2024. All rights reserved.