【问题标题】:convert from unsigned char array to long c从 unsigned char 数组转换为 long c
【发布时间】:2011-03-27 15:15:46
【问题描述】:

我使用 fread 将二进制文件中的 long 读入 unsigned char 缓冲区。

现在我想得到长。我该怎么做?

unsigned char buffer[sizeof(long)];

fread(buffer, sizeof(long), 1, my_file);

谢谢!

【问题讨论】:

    标签: c long-integer


    【解决方案1】:

    你的意思是:

    long buffer;
    fread(&buffer, sizeof(long), 1, my_file);
    

    【讨论】:

    • @nnn 不客气。我想你可以从中推断出你可以读入任何类型的变量,而不仅仅是 char[]。
    • 请注意,这仅在生成文件时使用的字节序与您的系统相同时才有效。通常它可能会有所不同(例如,在摩托罗拉 CPU 上生成并在 x86 上读取的文件)。此外,“long”类型的大小可能不匹配(例如 32 位系统与 64 位系统)。一般来说,您应该指定用于存储“long”的格式(多少字节?哪个是最重要的?)。
    • @Giuseppe 谢谢。所有的好点。我怀疑@nnn 仍处于学习的相对早期阶段,最好将此类问题推到一边。
    • (续)如果 long 以 4 个字节(假设每个字节 8 位)按重要性递增的顺序存储,并且如果您的“long”是 32 位或更多,则可以使用一种可移植的方式来执行转换为“long v = b[0]+0x100*b[1]+0x10000*b[2]+0x1000000*b[3]”。请注意,算术运算符在所有系统上的行为都相同,而面向位的则不然。因此,让编译器以最佳方式优化操作;-)
    • @Giuseppe 这些对 OP 有何帮助?
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2013-05-16
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多