c++将内存从一种类型复制到另一种类型
C++ copying memory from one type to another
我想将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);
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 在运行时检查继承是否只有一种类型和 void*
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 在硬件SIMD矢量指针和相应类型之间进行"interpret_cast"是一种未定义的行为吗
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- void* 数组将元素转换为另一种类型
- 使用字节向量作为其他类型的原始存储是一种好的做法吗
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 将一种类型的比特重新解释为不同类型的比特的技术
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 在枚举类型上使用std::max是不是一种糟糕的做法
- 为什么需要类型名称,即使似乎足以推断名称应该是一种类型?
- 在 c++ 中将一种结构类型分配给另一种类型
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- 我怎样才能让编译器推导出一种类型的 nullptr
- 如何测试指针类型是否可以安全地转换为另一种指针类型?
- 有没有一种很好的方法来实现具有默认失败情况的条件类型?
- 一种类型的多个 cv 分解
- 如何将对象定义为一种类型,然后再将其声明为子类型