문제

나는 비트 깃발 시퀀스를 나타내는 256 자 문자열의 16 진 문자를 가지고 있으며, 그것들을 다시 비트 스트링으로 변환하려고 노력하여 조작 할 수 있습니다. &, |, vec 그리고 같은. Hex Strings는 8 바이트 그룹이 "76543210" 비트 스트링으로 번역해야합니다 "\x10\x32\x54\x76", 즉 8 비트가 가장 낮습니다 00001000.

문제는 그 것입니다 pack"S"h"형식은 8 개가 아닌 한 번에 1 바이트의 입력에서 작동하므로 직접 사용한 결과는 올바른 순서가 아닙니다. 현재로서는 다음과 같습니다.

my $bits = pack("h*", join("", map { scalar reverse $_ } unpack("(A8)*", $hex)));

작동하지만 해킹감을 느낍니다. 더 깨끗한 방법이 있어야하는 것처럼 보이지만 내 pack-fu는 그리 강하지 않습니다. 이 번역을하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

my $hex = "7654321076543210";  # can be as long as needed
my $bits = pack("V*", unpack("N*", pack("H*", $hex)));
print unpack("H*", $bits);  #: 1032547610325476

다른 팁

우수한 사용을 고려하십시오 비트 :: 벡터.

사용 마녀 Hex 문자열을 Perl의 숫자의 내부 표현으로 바꾸는 기능, 비트 작업을 수행하고 사용합니다. Sprintf 그것을 16 진수로 다시 바꾸려면 :

#!/usr/bin/perl

use strict;
use warnings;

my $hex = "76543210";
my $num = hex $hex;

$num &= 0xFFFF00FF; # Turn off the third byte

my $new_hex = sprintf("%08x", $num);

print "It was $hex and is now $new_hex.\n";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top