将德尔福记录与"polymorphic"转换为C / C ++
convert delphi record with "polymorphic" to c/c++
据我所知,我有一些较旧的Delphi代码习惯于将单个精度数字"看起来"为长整数写入二进制文件:(下面显示的部分代码)
type
GridFileType = file of longint;
TTrick = Record
case Boolean of
False: (MyLongInt: LongInt);
True: (MySingle: Single);
end;
implementation
VAR
li: longint;
sp: single;
Trick: TTrick;
PROCEDURE WriteSingle(VAR GridFile: GridFileType; sp: single);
BEGIN
Trick.MySingle:=sp;
write(GridFile,Trick.MyLongInt);
END;
我在德尔福(Turbo Pascal)方面的经验非常有限,而且我已经很久没有在这方面做任何事情了 - 也许我弄错了。但是 - 如何在 C/C++ 中编写等效的东西?
我试过只将浮点数写入二进制文件,但结果并不相同......
这个德尔菲变体记录从字面上翻译为 C 并集。在德尔菲变体记录中,MyLongint
和MySingle
在结构中占据相同的位置。等效的 C 联合如下所示:
union myunion
{
int myint;
float myfloat;
};
在呈现的德尔菲代码中,实际上并不需要任何变体记录。代码可以完美地写成这样:
PROCEDURE WriteSingle(VAR GridFile: GridFileType; sp: single);
BEGIN
write(GridFile,sp);
END;
在这一点上,该过程似乎有些多余。
在 C 代码中,您可以执行相同的操作,并将浮点值直接写入文件。实际上没有必要将其别名为整数并写入整数。完全相同的字节将落在文件中。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将德尔福记录与"polymorphic"转换为C / C ++