如何从十六进制格式的解包中获取校验和?
我一直试图找出 Perl 中的 unpack 函数,但不太清楚说出整个事情。
我有什么: 一个字符串和一个 16 位十六进制校验和 (例如“这是我的字符串”
,“0671”
)
我需要检查“这是我的字符串”
等于校验和'0671'
。
所以我知道 unpack("%16W*", $string)
会给我 16 位十进制值,但我需要十六进制表示。我知道这是一件容易的事,所以请原谅我的无知。
I've been trying to figure out the unpack function in Perl and can't quite figure out the whole thing.
What I have:
A string and a 16-bit hex checksum
(e.g. "this is my string"
, "0671"
)
I need to check that "this is my string"
equals the checksum '0671'
.
So I know unpack("%16W*", $string)
will give me the 16-bit decimal value, but I need the hex representation. I know this is an easy one so please forgive my ignorance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如您所说,
unpack("%16W*", $string)
为您提供一个整数。要将整数转换为十六进制,请使用 sprintf:如果您想要大写的十六进制数字,使用
%X
而不是%x
(在本例中为%04X
)。或者,您可以采用另一种方式,使用 hex 将十六进制校验和转换为整数:
As you said,
unpack("%16W*", $string)
gives you an integer. To convert an integer to hex, use sprintf:If you want upper-case hex digits, use
%X
instead of%x
(or%04X
in this case).Or, you could go the other way and convert your hex checksum to an integer using hex:
尝试
unpack("b*',$string)
。请参阅 pack man页 的语法。
Try
unpack("b*',$string)
.See the pack man page for syntax.