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

Ruby中如何将十六进制字符串转换为对应十六进制字节(UDP场景)

解决方案:将十六进制字符串转换为Ruby中的字节序列

别担心,这个问题其实Ruby自带的方法就能轻松解决,不用依赖任何外部库。你遇到的核心问题是:想要把拼接出来的十六进制字符串(比如"c56b40...")转换成对应的二进制字节,而不是把每个字符转成它的ASCII十六进制值。

正确的实现方式

Ruby的Array#pack方法里的'H*'格式符正好是干这个的——它会把一个十六进制字符串直接转换成对应的二进制字节序列。具体步骤如下:

  1. 先把所有十六进制片段拼接成一个完整的十六进制字符串(这一步你已经在做了);
  2. 用[完整十六进制字符串].pack('H*')将其转换为二进制字节;
  3. 直接写入文件就能得到你想要的十六进制字节内容。

完整代码示例:

a = "12"
b = "15"

# 拼接成完整的十六进制字符串(和你原来的逻辑一致)
hex_string = "c56b4040003300" + a + "800401" + b + "90000000"

# 关键:将十六进制字符串转换为二进制字节
header_bytes = [hex_string].pack('H*')

# 写入文件验证效果
File.write('udp_packet.bin', header_bytes)

为什么之前的方法不行?

你尝试的"\xc5\x6b..." + a + "..."写法报错,是因为Ruby的字符串转义(比如\xc5)是在代码编译阶段就处理的,没办法在运行时把变量a的值(比如"12")当成转义的一部分。而pack('H*')是在运行时处理字符串,完美适配你用变量拼接十六进制片段的场景。

验证效果

运行上面的代码后,用十六进制编辑器打开udp_packet.bin,就能看到你想要的内容:

c5 6b 40 40 00 33 00 12 80 04 01 15 90 00 00 00

内容的提问来源于stack exchange,提问作者Mtoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:31:41