如何从十六进制格式的解包中获取校验和?

发布于 2024-10-18 20:42:19 字数 362 浏览 1 评论 0原文

我一直试图找出 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 技术交流群。

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

发布评论

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

评论(2

涫野音 2024-10-25 20:42:19

正如您所说, unpack("%16W*", $string) 为您提供一个整数。要将整数转换为十六进制,请使用 sprintf

my $string = "this is my string";
my $expected = '0671';

my $checksum = sprintf('%04x', unpack("%16W*", $string));
print "match\n" if $checksum eq $expected;

如果您想要大写的十六进制数字,使用 %X 而不是 %x (在本例中为 %04X)。

或者,您可以采用另一种方式,使用 hex 将十六进制校验和转换为整数:

my $string = "this is my string";
my $expected = '0671';

my $checksum = unpack("%16W*", $string);
print "match\n" if $checksum == hex $expected; # now using numeric equality

As you said, unpack("%16W*", $string) gives you an integer. To convert an integer to hex, use sprintf:

my $string = "this is my string";
my $expected = '0671';

my $checksum = sprintf('%04x', unpack("%16W*", $string));
print "match\n" if $checksum eq $expected;

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:

my $string = "this is my string";
my $expected = '0671';

my $checksum = unpack("%16W*", $string);
print "match\n" if $checksum == hex $expected; # now using numeric equality
澜川若宁 2024-10-25 20:42:19

尝试 unpack("b*',$string)

请参阅 pack man页 的语法。

Try unpack("b*',$string).

See the pack man page for syntax.

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