我想将char [4]的位值保存到int中。 说" aaaa"是字符串,我喜欢int为1633771873。
'一个'在内存中的一个字节上存储为01100001,因此" aaaa"是 01100001 01100001 01100001 01100001,或32位,应该适合int,其十进制值为1633771873。
如何将char [4]的位值复制到int的内存中?
答案 0 :(得分:7)
您可以使用std::memcpy(void* dest, const void* src, std::size_t count)
之类的
std::memcpy(&my_int, my_char, 4);
答案 1 :(得分: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
Unions还解决了endiannes的问题(因为union中的字节布局将是特定于平台的)。
答案 2 :(得分:1)
这可以通过移动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;
}
答案 3 :(得分:0)
显然memcpy对此有好处,但我认为编写这种代码并不是一个好主意。这取决于您的CPU架构,因为Little Endian和Big Endian CPU上的整数会有所不同。 显然不是在这种情况下,所有字节都相同,但一般情况下。
答案 4 :(得分:0)
这个怎么样,
const char *pcString = "aaaa";
int *ptrToInt = new int();
memcpy(ptrToInt, pcString, 4);