在STDIN上执行ntohl的Ruby脚本

在STDIN上执行ntohl的Ruby脚本,ruby,scripting,Ruby,Scripting,我需要创建一个脚本,将4字节的输入转换为相反的形式。我想基本算法是这样的 从标准输入读取输入 转换为字节数组 反转阵列 在标准输出上写入字节 非常感谢您的帮助 STDIN.read(4).unpack('C*').reverse.pack('C*') 它从STDIN读取四个字节,将字符串解压为8位无符号整数的列表,反转列表,然后将其打包为8位无符号整数 它从STDIN中读取四个字节,将字符串解压为8位无符号整数的列表,反转该列表,然后将其打包为8位无符号整数。@Theo回答了问题中列出的步骤,

我需要创建一个脚本,将4字节的输入转换为相反的形式。我想基本算法是这样的

  • 从标准输入读取输入
  • 转换为字节数组
  • 反转阵列
  • 在标准输出上写入字节
  • 非常感谢您的帮助

    STDIN.read(4).unpack('C*').reverse.pack('C*')
    
    它从
    STDIN
    读取四个字节,将字符串解压为8位无符号整数的列表,反转列表,然后将其打包为8位无符号整数


    它从STDIN中读取四个字节,将字符串解压为8位无符号整数的列表,反转该列表,然后将其打包为8位无符号整数。

    @Theo回答了问题中列出的步骤,但答案假设主机的顺序与网络顺序不同。为了安全起见,一个更简单但有效的解决方案是:

    STDIN.read(4).unpack("N")[0]
    

    因为这会将您读取的数据从网络顺序转换为主机顺序,而不管它们是相同的还是不同的。此外,它比
    /
    反向
    /
    解包
    解决方案更好地传达意图。

    @Theo回答了问题中列出的步骤,但答案假设您的主机顺序与网络顺序不同。为了安全起见,一个更简单但有效的解决方案是:

    STDIN.read(4).unpack("N")[0]
    
    因为这会将您读取的数据从网络顺序转换为主机顺序,而不管它们是相同的还是不同的。此外,与
    打包
    /
    反向
    /
    解包
    解决方案相比,它能更好地传达意图