2013-07-22 2 views
0

내 장치에서 일부 원시 데이터를 읽습니다. 이 데이터에는 IP 주소도 포함되지만 형식은 다릅니다. 아시다시피 IP 주소는 일반적으로 a.b.c.d 형식으로 작성됩니다. 그러나 나는 장치에서 주어진 abcd 형식의 데이터를 가지고 있습니다. 이 형식을 a.b.c.d 형식으로 가져와야합니다. 펄 스크립트에서 어떻게 할 수 있습니까?perl 스크립트에서 문자열의 여러 위치에 특수 문자 추가

감사

+1

['unpack' 기능] (http://perldoc.perl.org/functions/unpack.html)을 사용하여 바이너리 데이터를 Perl 스칼라로 변환 할 수 있습니다. 그게 니가하고 싶은거야? – amon

+0

장치에서 들어오는 IP 주소의 예를 보여주십시오. – Borodin

+0

내 코드는 일종의 정렬입니다 : print $ string; 출력은 c0a80001과 같습니다. c0.a8.00.01을 포함하도록 $ string을 만들고 싶습니다. 어떻게해야합니까? – Daylite

답변

-1

를 정말 촬영 방법에 따라 다르지만 대부분의 경우 일부 소스 코드 BTW 좋을와 IP 주소

a\.b\.c\.d 

에서 백 슬래시 점을 탈출해야합니다 ...

+0

내 코드는 일종의 정렬입니다 : print $ string; 출력은 c0a80001과 같습니다. c0.a8.00.01을 포함하도록 $ string을 만들고 싶습니다. 어떻게해야합니까? – Daylite

0

여러 가지가 있습니다. 그러면 하위 문자열이있는 점이 삽입됩니다.

map {substr ($ string, $ _, 0) = '.' } (6,4,2);

아마도 정규 표현식을 선호 할 것입니다.

$ string = ~ s/[0-9a-f] {2} \ K (?! \ Z) /./ g;

0

첫째, 우리는 두 문자의 문자열로 16 진수 문자열을 분할하자 : 우리는 16 진수 문자열로 각 조각을 치료

... split /..\K/, "c0a80001"; 

하고 hex 내장과 숫자 값을 얻을 :

... map hex, ... 

그런 다음, 우리는 마침표로 모든 숫자에 가입 :

join '.', ... 

결합을 :

my $ip = join '.', map hex, split /..\K/, "c0a80001"; 
print "$ip\n"; 

출력 : 192.168.0.1. 이것은 IPv4 주소의 일반적인 텍스트 표현입니다.

관련 문제