endian.h 用于浮点数

问题描述 投票:0回答:2

我正在尝试读取一个未格式化的二进制文件,该文件是由大端机器写入的。我的机器是32位小端。 我已经知道如何为不同的变量类型交换字节,但这是一项繁琐的工作。我发现这组函数endian.h可以非常轻松地处理整数交换。 我想知道浮点数或字符串是否有类似的东西,或者我是否必须从头开始编程?因为对于这个字节顺序问题,它们作为整数的处理方式不同。 谢谢。

endianness
2个回答
0
投票

我认为没有用于交换浮动的标准标头。你可以看看 http://www.gamedev.net/page/resources/_/technical/game-programming/writing-endian-independent-code-in-c-r2091 它提供了一些有用的代码。

对于字符串来说,不需要进行字节序交换。字节顺序用于对变量的字节进行排序。字符串由一系列字符组成。每个字符只有一个字节,因此没有什么可以交换。


0
投票

迟到了12年。 在 C 中,您可以将指针 (

&input
) 转换为
uint32_t
指针,并传递该指针 (
uint32_t
) 的第一个
*
,如下所示:

#include <stdint.h>
#include <stdio.h>
#include <endian.h>

// some helper macros to print stuff
#define _print4bytes(x) printf("%02X %02X %02X %02X\n", (x)[0], (x)[1], (x)[2], (x)[3])
#define print4bytes(x) _print4bytes((uint8_t*)x);

int main(int argc, const char *argv[]) {

    float input = 1.0;

    // here's the magic
    uint32_t output = htobe32(*(uint32_t*)&input);
    
    // set it 0, 1, 2 or 3 to get 1st, 2nd, 3rd or 4th byte
    uint8_t byte = ((uint8_t*)&output)[0];

    print4bytes(&input);
    print4bytes(&output);

    return 0;
}

我认为您并不关心获取浮点数,而只是关心稍后通过网络发送的原始字节。

© www.soinside.com 2019 - 2024. All rights reserved.