C++ 将 Int 拆分为 4 个部分(32 位机)

标签 c++ memory int 32-bit

好吧,如果我有一个这样的 int(用来存储一行 ASM)

int example = 0x38600000; //0x38600000 = li r3, 0 

我如何将这个 int 分成 4 个独立的部分?我想出了这个

int example = 0x38600000;
char splitINT[4];
for(int i = 0; i < 4; i++)
{
    splitINT[i] = *(char*)(((int)&example + (0x01 * i)));
}
//splitINT[0] = 0x38;
//splitINT[1] = 0x60;
//splitINT[2] = 0x00;
//splitINT[3] = 0x00;

当从运行我的可执行文件的进程中读取内存时,上面的代码实际上工作得很好,但是当尝试从其内部读取程序自己的内存时,这不起作用,如上面的代码示例所示。

那么我还能如何将 int 拆分为 4 个独立的部分?

最佳答案

你的代码真的很困惑,因为我不确定为什么它在声明中转换为 int 的情况下仍然有效。您可以通过将 32 位 int 转换为 char * 来读取每个单独的字节,其中 char 是一个字节的大小在你的机器上。

int example = 0x38600000;
char *bytepointer = reinterpret_cast<char*>(&example);
for(int i = 0; i < 4; i++)
{
    std::cout << static_cast<int>(bytepointer[i]) << " ";
}

std::cout << std::endl;

也可以使用bytepointer逐字节修改int的内存内容。

此外,你还应该查一下endianness的作用在确定整数的内存布局时。机器可以选择使用大端或小端布局,这将改变打印字节的顺序以及修改 int 的方式。

关于C++ 将 Int 拆分为 4 个部分(32 位机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215724/

相关文章:

ios - GLSL:更改两个以上的顶点尺寸会使着色器崩溃

sql - django对象...values()仅选择一些字段

c# - 滚动条的哲学

c - 从映射文件中获取第 N 个字节

由于 std::pair,GCC (MoSync) 中的 C++ 构建错误

c++ - 你如何在 C++ 中将 UINT8 转换为 UINT32?

mysql - 将 MySQL 结果转换为 int (C++)

c++ - 将无符号(长)整数解释为在 C++ 中签名

c++ - 寻求有关消耗多个值的 C++11 printf 格式参数的解释

C++11 std::unique_ptr 删除器