c++中的动态数据类型转换
Dynamic data type casting in C++
我正在研究一个使用10种固定数据类型的DLL: 8/16/32/64位的无符号/有符号整数和32/64位的浮点数。
我从客户端收到一个指向缓冲区的void指针以及一个代表数据类型的enum。然后,我必须查看所提供的数据类型枚举,以了解要将缓冲区强制转换为哪种数据类型,以便提取值。
的例子:
nU8Val = (*(U8*)pvBuffer);
nU16Val = (*(U16*)pvBuffer);
nU32Val = (*(U32*)pvBuffer);
是否有办法将这个逻辑组合成一行,例如:
nMyVal = *((TypeOf(nMyVal)*)pvBuffer);
我不需要为所有数据类型定义变量并为每个数据类型枚举重复相同的逻辑
编辑:我更新了示例逻辑,以便清楚地了解我试图做的事情,只要将void*缓冲区转换为接收变量的数据类型的指针
这里有一个模板,可以从受让人那里推断出类型,这样你就不必重复了:
template<typename To>
void copy_deduced(void* from, To& to) {
to = *reinterpret_cast<To*>(from); // avoid c-style casts
}
copy_deduced(pvBuffer, nU8Val);
// ...
这里的问题是它已经在动态类型中,即void*。我会做什么,如果我正确理解你的问题,是创建一个结构与一个void*(我会分配一个新的块)和代表数据类型的枚举值。然后,在使用值时,使用switch语句来决定非常相似的代码片段。您不能简单地将所有内容强制转换为64位类型,如double或unsigned long long,正如注释中建议的那样,因为如果分配少于8字节,这可能导致未经授权的成员1内存访问错误,这是可以想象的,因为70%的可能类型小于8字节。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 从 cpp lib 调用函数时的数据类型转换
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- pybind11:Python 到 C++ 数据类型转换不起作用
- 尝试执行绕道附加,但无法将我的lua函数的数据类型转换为LPVOID
- 使用正确的数据类型转换java中的c++方法逻辑
- XLL由XLW制造,BOOST UBLAS MyMatrix数据类型转换为双**失败
- 将原始数据类型转换为空隙指针类型
- 为什么数据类型转换错误只出现在C++中而不出现在C中
- 正在尝试将time_t数据类型转换为(dd/mm/yyyy)格式C++
- C++中的类到类数据类型转换
- C++ 中的数据类型转换
- 无法从一种数据类型转换为相同的数据类型?
- 内置数据类型转换为用户定义的数据类型c++
- 如何将c数据类型转换为neon数据类型
- 将内置数据类型转换为std::string: memcpy vs snprintf
- c++中的动态数据类型转换
- 如何将Mat数据类型转换为无符号短指针
- 将c++的变量数据类型转换为c#