objective-c - Delphi double 型到 Objective C double 型

标签 objective-c delphi double

我花了几个小时寻找这个问题的解决方案,但我不明白它是如何工作的。我有一个来自delphi双值的十六进制字符串:0X3FF0000000000000。该值应该是 1.0。它的长度为 8 个字节,第一位是符号,接下来的 11 位是指数,其余是尾数。所以对我来说这个十六进制值等于 0 x 10^(1023)。也许我有什么地方错了,但这并不重要。关键是,我需要这个十六进制值转换为 objective-c 双值。如果我这样做: (double)strtoll(hexString.UTF8String, NULL,16); 我得到:4.607...x 10 ^18。我究竟做错了什么?

最佳答案

似乎尝试以这种方式进行转换最终会调用隐式类型转换(调用 _ultod3_ltod3),从而改变底层数据。事实上,即使尝试这样做似乎也做了同样的事情:

UINT64 temp1 = strtoull(hexString, NULL, 16);
double val = *&temp1;

但是,如果将 uint 指针强制转换为 double*,它似乎会抑制编译器尝试执行转换的愿望。像这样的东西应该有效:

UINT64 temp1 = strtoull(hexString, NULL, 16);
double val = *(double*)&temp1;

至少这适用于 MS C++ 编译器...我想 Objective C 编译器也会配合。

关于objective-c - Delphi double 型到 Objective C double 型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25326526/

相关文章:

ios - 使用 UISearchBar 作为 UITableView 的标题 View 不可避免的保留周期?

iphone - 添加新版本的核心数据模型?

sql-server - 是否可以使用 DBX 以编程方式创建数据库?

forms - 如何在 Delphi XE2 中使 TMaskEdit 进行多行编辑

c# - 使用正则表达式将 double 替换为 float

c# - double.NaN 和 double.NegativeInfinity 的 CompareTo 行为

ios - 在 Swift 中将 Double 转换为 NSNumber 会失去准确性

iphone - 标签边框内的间距

objective-c - iOS 超时功能无法正常工作

delphi - 如何使用 Open Tools API 折叠插入的区域?