gpt4 book ai didi

c - 将 8 字节值转换为实际数字 :

转载 作者:行者123 更新时间:2023-12-04 04:33:22 24 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。



Improve this question




我有 8 个字节代表一个数字。我给出的描述是:

"Signed Little-Endian encoded eight byte integer field with eight implied decimal places"



当从文件转储中“挖出”数据时,八个字节是(我已经包含了字符表示只是为了使二进制清晰):
  • [0] = 0 ('\0')
  • [1] = 86 ('v')
  • [2] = 41 (')')
  • [3] = 50 ('2')
  • [4] = 48 ('0')
  • [5] = 0 ('\0')
  • [6] = 0 ('\0')
  • [7] = 0 ('\0')

  • 在查找了 endian-ness 维基百科文章后,我想我需要从 [7] 开始,然后向后工作到 [0](文件顺序是从 [0] 到 [7])。但我不确定我需要对这些值做什么。

    有人可以帮我算出这个数字是多少(这样我就可以将这 8 个字节分配给一个 double 数)?

    最佳答案

    您的假设是错误的 LE 意味着第一个字节是重要性最低的字节。

    要便携地转换它,您可以使用

    uintmax_t read_le_value(char * data, size_t len)
    {
    uintmax_t value = 0;
    size_t i;
    for (i=0; i<len; i++) {
    value |= data[i] << (8*i);
    }
    return value;
    }

    你可以调用这个函数
    int64_t result = read_le_value(array, sizeof array);

    请注意,这会调用实现定义的行为:在不使用二进制补码存储有符号值的体系结构上,它可能会中断。

    如果没有另一点,这个 64 位值就可以了:

    with eight implied decimal places



    可能是指它可能是一个定点表示法并且值为 1200000000 的事实。确实是指 12.00000000 .

    所以你应该将结果除以 1E8 (=100000000) 以获得想要的结果。

    但请注意,转换为 double失去精度,如 double只有 53 位精度。

    因此,表示为 100000000000000001 的值 1000000000.00000001 将转换为 1000000000.0:如果减去此数字,您将得到 0.0,而不是您想要的 .00000001。

    关于c - 将 8 字节值转换为实际数字 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164407/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com