2012-04-02 2 views
2

코드 조각을 시도하고 있습니다.파일에 16 진수 데이터 쓰기

<?php 
$tmp = ord('F'); //gives the decimal value of character F (equals 70) 
$tmp = $tmp - 55; //gives 15 - decimal equivalent of 0x0F 
$tmp = dechex($tmp); // converts 15 to 0x0F 
$fp = fopen("testing.data","wb+"); 
fwrite($fp,$tmp); 
fclose($fp); 
?> 

16 진수 편집기에서 testing.data 파일을 열면 2 바이트가 기록됩니다. 2 바이트는 0x36과 0x33입니다. 파일에 1 바이트 즉 0x0f 만 기록 될 것으로 예상됩니다. 이것은 일어나지 않습니다. 도와주세요.

답변

5

당신이 파일에 바이트 0x0f를 작성하려는 경우, 단순히 ASCII 코드 문자를 작성합니다. 당신은 효과적으로 ord을 취소하려면, 그 반대 기능은 chr입니다 :

<?php 
$tmp = ord('F'); //gives the decimal value of character F (equals 70) 
$tmp = $tmp - 55; //gives 15 - decimal equivalent of 0x0F 
$tmp = chr($tmp); // converts 15 to a character 
$fp = fopen("testing.data","wb+"); 
fwrite($fp,$tmp); 
fclose($fp); 
?> 
+2

한'chr'가 쉽게 여기에 작업을 수행합니다. 'pack'은 더 다재다능하며, 특정 바이트 순서 형식 (little-endian, big-endian 등)으로 다중 바이트 값을 변환 할 수 있습니다. – knittl

+0

고마워요! :-) 나는 정반대로 노력했다. – user1051505

5

숫자 0x0F의 문자열 표현을 파일에 쓰고 있습니다 (문자 당 1 바이트 사용).

PHP에서는 pack 함수를 사용하여 이진 문자열을 만듭니다.

$bindata = pack('n', 0x0F); 
file_put_contents('testing.data', $bindata);