현재 위치: > 최신 기사 목록> 팩 ()을 사용하여 플로팅 포인트 번호를 패키지하는 올바른 방법

팩 ()을 사용하여 플로팅 포인트 번호를 패키지하는 올바른 방법

M66 2025-06-04

1. pack () 함수 소개

pack () 함수의 기본 구문은 다음과 같습니다.

 string pack(string $format, mixed ...$values)
  • $ 형식 : 형식 문자열. 나중에 전달 된 값의 포장 방법을 정의합니다.

  • $ 값 : 패키지 할 데이터 목록.

예를 들어, Pack ( 'C', 65)은 ASCII 값이 65 (즉, 문자 A )의 바이트를 반환합니다.


2. 부동 소수점 번호 형식 기호

플로팅 포인트 번호의 경우 Pack ()는 두 가지 주요 형식 기호를 제공합니다.

  • F : 데이터를 32 비트 단일 정밀 부동 소수점 번호 로 패키지하십시오.

  • D : 데이터를 64 비트 이중 확보 부동 소수점 번호 로 패키지하십시오.

그러나 문제는 - 엔디 니스가 다른 플랫폼에서 다를 수 있다는 것입니다. pack () 에서 접두사별로 바이트 주문을 지정할 수 있습니다.

  • F / D : 호스트 엔디 니스 사용 (아마도 큰 엔디 언 또는 작은 엔디언)

  • G : Little Endian Endian Endian 사용 (인텔 아키텍처와 유사)을 사용하는 32 비트 플로팅 포인트 번호

  • G : Big Endian 바이트 주문 사용 32 비트 플로팅 포인트 번호

  • E : 64 비트 플로팅 포인트 번호, 리틀 엔디 언트 바이트 순서

  • E : 64 비트 플로팅 포인트 번호, 빅 엔디 언트 바이트 순서

참고 : G / G / E / E는 PHP 7.0부터 시작되었습니다.


3. 예 : 플로팅 포인트 번호를 이진 문자열로 포장합니다

Floating Point 번호 3.14를 네트워크 전송에 필요한 바이너리 스트림으로 패키지 (Big Endian 사용)로 패키지하려고한다고 가정합니다.

 <?php
$float = 3.14;
$binary = pack('G', $float); // 빅 엔드로 포장32비트 플로팅 포인트 번호
echo bin2hex($binary); // 출력 16 진수 결과 뷰
?>

출력 (아마도 유사) :

 4048f5c3

이 값은 IEEE 754 표준을 지원하는 다른 언어로 3.14로 다시 구문 분석 할 수 있습니다.


4. 검증 풀기

Unpack ()를 사용하여 위의 포장 된 값이 정확한지 확인할 수 있습니다.

 <?php
$binary = pack('G', 3.14);
$result = unpack('Gfloat', $binary);
echo $result['float']; // 산출 3.14
?>

5. 실제 응용 프로그램 : 플로팅 포인트 번호는 포장되어 업로드됩니다.

API를 구축하고 있으며 여러 플로팅 포인트 번호를 패키지하고 업로드해야한다고 가정합니다.

 <?php
$data = [1.23, 4.56, 7.89];
$binary = '';
foreach ($data as $num) {
    $binary .= pack('G', $num); // 큰 엔디언 형식
}

// 포장 된 데이터를 서버에 업로드하십시오
$url = 'https://m66.net/upload-float-data';
$options = [
    'http' => [
        'method' => 'POST',
        'header' => "Content-Type: application/octet-stream\r\n",
        'content' => $binary,
    ],
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

6. 팁

  • 플로팅 포인트 정확도에 대한 요구 사항이 높은 경우 D (64 비트 더블)를 사용하십시오.

  • 플랫폼에서 통신 할 때는 엔디 언을 통합해야하며 G (32 비트 빅 엔디 언) 또는 E (64 비트 빅 엔디안)를 사용하는 것이 좋습니다.

  • Bin2Hex () 또는 포장을 사용하여 포장 된 결과를 디버깅하십시오.

  • 기본 F 또는 D를 명시 적으로 알지 않고도 기본 F 또는 D 를 사용하지 마십시오.