如何在 Perl 中将十进制数转换为十六进制字符串?

发布于 2024-09-29 03:36:14 字数 84 浏览 2 评论 0原文

如何在 Perl 中将十进制数转换为十六进制字符串?

例如,我想将 2001 转换为“0x07”和“0xD1”。

How do I convert a decimal number to a hex string in Perl?

For example, I would like to convert 2001 into "0x07" and "0xD1".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

可是我不能没有你 2024-10-06 03:36:14

这适用于这种情况:

($x,$y) = map { "0x$_" } 
          sprintf("%04X\n", 2001) =~ /(..)(..)/; 

但我想知道你真正想要做什么。如果您尝试获取 UTF-16,这不是您想要的方式。

如果您想弄清楚打包二进制数据的布局,那么您应该使用unpack。 “C4”格式适用于 4 字节整数。

$int = 2001;
$bint = pack("N", $int);
@octets = unpack("C4", $bint);
printf "%02X " x 4 . "\n", @octets;
# prints: 00 00 07 D1

出于某些目的,您可以使用 printf 的矢量打印功能:

printf "%v02X\n", pack("N", 2001);
# prints: 00.00.07.D1

printf "%v02X\n", 255.255.255.240;
# prints: FF.FF.FF.F0

This works for that case:

($x,$y) = map { "0x$_" } 
          sprintf("%04X\n", 2001) =~ /(..)(..)/; 

But I wonder what you're really trying to do. If you're trying to get UTF-16, this isn't the way you want to do that.

If you're trying to figure out the layout of packed binary data, then you should be using unpack. The "C4" format would work for a 4-byte integer.

$int = 2001;
$bint = pack("N", $int);
@octets = unpack("C4", $bint);
printf "%02X " x 4 . "\n", @octets;
# prints: 00 00 07 D1

For some purposes, you can use printf's vector print feature:

printf "%v02X\n", pack("N", 2001);
# prints: 00.00.07.D1

printf "%v02X\n", 255.255.255.240;
# prints: FF.FF.FF.F0
紧拥背影 2024-10-06 03:36:14

我不确定您想要什么格式,但转换为十六进制的一种方法是:

sprintf("%x", 2001)

I'm not sure what exact format you want it in, but one way to convert to hex is:

sprintf("%x", 2001)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文