c++将内存从一种类型复制到另一种类型

C++ copying memory from one type to another

本文关键字:类型 一种 复制 另一种 内存 c++      更新时间:2023-10-16

我想将char[4]的位值保存为int类型。假设"aaaa"是字符串,我希望int值为1633771873。

'a'在内存中存储为01100001,所以' aaaa '是01100001 01100001 01100001 01100001,或32位,适合整型,其十进制值为1633771873。

如何将char[4]的位值复制到int类型的内存中?

您可以使用std::memcpy(void* dest, const void* src, std::size_t count)

std::memcpy(&my_int, my_char, 4);

对于这种特殊情况,我建议最好的解决方案:

union U
{
    char c[4];
    int i;
};

使用它:

char arr[4] = "aaaa";
U u;
u.c[0] = arr[0];
u.c[1] = arr[1];
u.c[2] = arr[2];
u.c[3] = arr[3];
std::cout<< u.i; //use it

联合还解决了端序的问题(因为联合中字节的布局将是特定于平台的)。

这可以通过移动char数组的每个元素并将它们相加来实现:

#include <iostream>
int main()
{
    const char* a = "aaaa";
    unsigned int result = 0;
    for(int i = 0; i< 4; ++i)
    {
        result += ((unsigned int)a[i]) << (32-i*8); 
    }
    std::cout<< result;
    return 0;
}

显然memcpy会很好,但我不认为写这种代码真的是个好主意。这取决于你的CPU架构,因为你的整数在小端和大端CPU上是不同的。显然不是在这种情况下,所有字节都是相同的,但通常。

这个怎么样,

const char *pcString = "aaaa";
int *ptrToInt = new int();
memcpy(ptrToInt, pcString, 4);
相关文章: