如何在Ruby中反转32位无符号整数的字节序
Ruby中32位无符号整数的字节序反转方法
针对你需要的32位无符号整数字节序反转需求,这里有几种简便实现方式:
方法1:利用Ruby的pack/unpack(直观字节操作)
通过将整数转换为二进制字节串,反转字节后再转回整数,适合快速实现:
num = 3735928559 # 0xDEADBEEF swapped_num = [num].pack('N').reverse.unpack1('N') puts swapped_num # 输出 4022250974(即0xEFBEADDE)
pack('N'):将整数打包为4字节大端序的二进制字符串reverse:反转字节顺序unpack1('N'):将反转后的二进制字符串解包为无符号整数
方法2:手动位运算(适配后续位操作场景)
如果后续需要做位位移和掩码处理,手动位运算的方式更便于理解和扩展:
num = 3735928559 # 0xDEADBEEF swapped_num = ((num & 0x000000FF) << 24) | ((num & 0x0000FF00) << 8) | ((num & 0x00FF0000) >> 8) | ((num & 0xFF000000) >> 24) puts swapped_num # 输出 4022250974
- 用掩码提取每个字节:
0xFF系列掩码分别取出低到高的4个字节 - 移位调整位置:最低字节左移24位到最高位,次低字节左移8位,次高字节右移8位,最高字节右移24位
|按位或合并所有移位后的字节
方法3:使用Integer#byteswap(Ruby 2.5+ 内置方法)
Ruby 2.5及以上版本的Integer类提供了byteswap方法,直接反转整数的字节顺序(32位无符号数刚好是4字节,结果符合需求):
num = 3735928559 # 0xDEADBEEF swapped_num = num.byteswap puts swapped_num # 输出 4022250974
内容的提问来源于stack exchange,提问作者Michael Bonnet
相关产品推荐
相关产品推荐

