Ruby如何将十六进制字符串或整数转换为非字符串十六进制值(适配Gosu)
核心结论
Ruby中不存在独立的「非字符串十六进制类型」,你写的硬编码值0xffffffff本质就是整数4294967295的十六进制字面量写法,两者在内存中完全等价,没有任何差异。
解决方案
你完全不需要做额外的字符串转换操作:
- 从JSON读取到的十进制整数
4294967295本身就可以直接传入Gosu的绘制接口,性能和你硬编码0xffffffff完全一致 - 如果你确实需要把十六进制字符串转为对应整数,直接调用
to_i(16)即可:
hex_str = "0xffffffff" hex_int = hex_str.to_i(16) # 此时hex_int的值就是4294967295,和硬编码的0xffffffff完全相等
性能差异原因说明
你之前传Color类对象性能低是因为Color是封装后的实例对象,绘制时需要额外做属性读取、格式转换的开销;而直接传原始整数(不管你写代码时用的是十进制还是十六进制字面量)都是直接传递底层数值,没有额外开销。
可以用以下代码验证两者完全等价:
p 0xffffffff == 4294967295 # => true p 0xffffffff.class == 4294967295.class # => true
内容的提问来源于stack exchange,提问作者Taylor McDowell
相关产品推荐
相关产品推荐

