2014-11-06 1 views
1

정수를 현재 통합하려고하는 장치에 ACK로 전송하기 위해 4 바이트 (32 비트) 16 진수로 변환해야합니다. 예를PHP는 소켓 프로그래밍을 위해 32 비트 (4 Byte) 16 진수로 변환합니다.

를 들어

3 = 00000003 15 = 0000000F

확인 http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html 1. 드롭 다운 2. 32 비트 decomal 텍스트 상자 3의 값을 입력 서명했다. 16 진수 필드의 값을 확인하십시오.

이 매개 변수와 함께 php pack 기능을 사용하고 있지만 장치의 응답을 기반으로 올바른 접근 방식이 아닙니다.

$reply = pack(L*,$num); 

이 매개 변수가 올바른지 또는 다른 방법이 있습니다. 제안 해주세요.

+0

는 적절한 엔디안/바이트 순서를 사용하고 있는지 확인하십시오. PHP에서'0xDEADBEEF'는 디바이스에서'0xEFBEADDE' 일 필요가 있습니다. –

+0

뭐하고 있니? 또한 실제 코드에서는'L *'주위에 따옴표가 붙어 있나? –

+0

예 'L *'을 의미합니다. – user2055396

답변

1

난이

string(8) "0000000F" 
string(8) "00000003 

08X 수단 진수로 간주되는 인수 (필요한 경우) 0 패딩 8 문자 스트링을 출력한다

$a = 15; 
var_dump(sprintf("%08X", $a)); 
$a = 3; 
var_dump(sprintf("%08X", $a)); 

할 것이다. (대문자 문자) 귀하의 예제에서 너무

$reply = sprintf("%08X", $num) 
+0

당신의 아이디어를 테스트했으며 요청한대로 작동합니다. 그 동안 평균 출력 = pack ('N *', $ reply)을 사용하여 전체 코드를 실행했습니다. 서버가이 코드를 완벽하게 실행하고 업데이트 된 데이터를 받고 있습니다. – user2055396

+0

실제로 *가 필요하지 않습니다. – exussum

+0

*을 쓰는 용도는 무엇입니까? 나는 어디에서든지 충분한 설명을 찾을 수 없었다. 나는 그 모든 입력 숫자를 변환한다고 가정한다. – user2055396

관련 문제