c++ - 使用 C++ 将 char 数组转换为 int

标签 c++ arrays char int

任何人都可以解释一下这段代码是如何产生 16843009 的吗?它是如何工作的?

正如我在测试中看到的那样,(int *)&x 结果为 0x61ff1b,据我所知,这是数组中第一个元素的地址。 *(int *)&x 的结果如何是 16843009?谢谢。

#include <iostream>

using namespace std;


int main()
{
    char x[5] = {1, 1, 1, 1, 1};
    cout << *(int *)&x;

   return 0;;
}

最佳答案

如果我们将 16843009 写成二进制,我们将得到 1000000010000000100000001。用额外的零填充我们得到:00000001000000010000000100000001。每 8 位(即一个字符)的值为 00000001,即 1

&x 是指向 char 数组的指针(特别是 char(*)[5])。这被重新解释为指向 int 的指针。在您的系统上,int 可能是 4 个字节,所有这四个字节都单独设置为 1,这意味着您得到一个每 8 位都设置为 1 的 int。

关于c++ - 使用 C++ 将 char 数组转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56198610/

相关文章:

c++ - 如何在ARM Cortex-M芯片上使用STL?

c++ - 提升 Asio : Calling sync read while an async_read is pending on the same socket

javascript - 为什么修改 array.slice() 也会改变原始数组?

c++ - 对象数组和继承

Python-如果行包含则删除矩阵/数组中的行

c++ - 在 Intel CPU 上选择 32 位和 64 位内部 CRC

java - 如何在不复制对象的情况下将字符串转换为 char[]?

使用平行边更改字符串位置中的字符值,例如 yuv = vuy

c++ - 使用变量在 C++ 中创建 .txt 文件

c++ - 为什么 std::istringstream 只能在此处与构造函数一起使用?