如何在iPhone上将十六进制转换为双精度浮点数

3

我有以下Java代码:

   String pr = "4173df24c969ff63"
   long prLongBits = Long.valueOf(pr, HEX_BASE).longValue();
   prDoubleValue = Double.longBitsToDouble(prLongBits);

结果为:prDoubleValue = 2.083694058837832E7

如何在Objective C中进行转换?尝试将十六进制转换为长整型,然后将长整型转换为双精度浮点型,但没有正确的结果。

顺颂商祺,

Suppi

2个回答

3
我建议尝试以下内容:

我会尝试类似以下的方法:

// Read the hex string into a 64-bit integer
unsigned long long doubleBits;
double result;
NSScanner *scanner = [NSScanner scannerWithString:@"4173df24c969ff63"];
if ([scanner scanHexLongLong:&doubleBits]) {
    memcpy(&result, &doubleBits, sizeof(result)l
}

我还没有尝试过,但基本思路应该是正确的。你需要将十六进制字符串转换为适当大小的数值数据类型中存储的一堆字节。一旦这个位模式在内存中,我们就将它复制到分配给 double 的内存中。
这假设用于创建十六进制字符串的字符串表示使用与代码运行的字符串排序相同的字节排序。

0

你的问题有些模棱两可,但我认为你想将字符串解释为 double 的编码。这里是一种实现方法:

#include <string.h>
#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>

double interpretAsDouble(const char *string) {
    // convert the string to a 64-bit int ...
    uint64_t encoding;
    sscanf(string, "%"SCNx64, &encoding);
    // ... then interpret that 64-bit int as the encoding of a double.
    double value;
    memcpy(&value, &encoding, sizeof value);
    return value;
}

int main(int argc, char *argv[]) {
    printf("%g\n", interpretAsDouble("4173df24c969ff63"));
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接