【问题标题】:Finding if the system is little endian or big endian with perl使用 perl 查找系统是小端还是大端
【发布时间】:2011-02-06 08:08:58
【问题描述】:

是否可以使用 Perl 查找我的系统是小端字节序还是大端字节序?

【问题讨论】:

    标签: perl endianness


    【解决方案1】:
    perl -MConfig -e 'print "$Config{byteorder}\n";'
    

    Perl documentation

    如果输出字符串的第一个字节是 1,您可以假设(适度安全)它是 little-endian。如果是 4 或 8,你可以假设 big-endian。

    【讨论】:

    • +1 这显然是“正确”的做法。另一种方式(虽然直观)只是hacky。 :-P
    • 是的,尽管要得到“这个系统是大/小端吗?”这个问题的布尔答案。您需要对 Config 模块返回的值做进一步分析。
    • @Sean:问题是(正如引用的文档指出的那样),答案不是二进制的——对于像 PDP-11 这样使用 ' 3412' 作为字节顺序 - 既不是大端也不是小端。如果第一个字节是 1,您可以假设(适度安全)它是小端;如果是 4 或 8,你可以假设大端;如果这些都不是,那么也许是时候买一台更新的机器了。
    【解决方案2】:

    我猜你可以这样做:

    $big_endian = pack("L", 1) eq pack("N", 1);
    

    如果您的系统具有非标准(既不是大端也不是小端)字节顺序(例如 PDP-11),这可能会失败。

    【讨论】:

    • 这也是我的建议。 :) 除了我会使用比二进制 1 填充更多位的东西。
    猜你喜欢
    • 2011-05-10
    • 2010-09-18
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2010-11-03
    • 2010-09-26
    相关资源
    最近更新 更多