2011-08-24 105 views
3

翻一番我有这样的代码在Java中:如何转换十六进制在iphone

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

的结果:prDoubleValue = 2.083694058837832E7

我将如何转换这个目标C? 我试图从十六进制转换为长,然后长到双,但没有适当的结果。

BR,

Suppi

回答

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 
} 

我还没有尝试过了,但基本的思路应该是近似直角。您希望将十六进制字符串转换为以适当大小的数字数据类型存储的一堆字节。一旦该位模式在内存中,我们将其复制到分配给双精度的内存中。

这假定用于创建十六进制字符串的字符串表示形式使用与您的代码运行时相同的字节顺序。

+0

谢谢一吨,这似乎工作正常.... – Suppi

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; 
} 
相关问题