You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:17:38