在STDIN上执行ntohl的Ruby脚本
我需要创建一个脚本,将4字节的输入转换为相反的形式。我想基本算法是这样的在STDIN上执行ntohl的Ruby脚本,ruby,scripting,Ruby,Scripting,我需要创建一个脚本,将4字节的输入转换为相反的形式。我想基本算法是这样的 从标准输入读取输入 转换为字节数组 反转阵列 在标准输出上写入字节 非常感谢您的帮助 STDIN.read(4).unpack('C*').reverse.pack('C*') 它从STDIN读取四个字节,将字符串解压为8位无符号整数的列表,反转列表,然后将其打包为8位无符号整数 它从STDIN中读取四个字节,将字符串解压为8位无符号整数的列表,反转该列表,然后将其打包为8位无符号整数。@Theo回答了问题中列出的步骤,
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]
因为这会将您读取的数据从网络顺序转换为主机顺序,而不管它们是相同的还是不同的。此外,与打包
/反向
/解包
解决方案相比,它能更好地传达意图