>

PHP를 사용하여 바이트 배열을 UINT64로 변환하고 싶습니다.

C #에서는이 작업을 쉽게 수행 할 수 있지만 PHP에서는이 작업을 수행하고 싶습니다

여기 C # 코드가 있습니다.

bytes = Encoding.UTF8.GetBytes(hashed);
BitConverter.ToUInt64(bytes, 0);

이것을 PHP로 변환하고 싶습니다.

pack() 를 사용하려고했습니다.  기능이지만 작동하지 않습니다.

이것이 바이트 배열이라고 가정하자.

$bytes = [101,102,54,55,99,55,56,49];
pack("J*","101","102","54","55","99","55","56","49");

경고가 표시됩니다.

epack(): 7 arguments unused on line

어떻게 고칠 수 있습니까?


  • 답변 # 1

    여기의 주요 문제는 (정확히 이해한다면) PHP 배열을 사용하여 바이트 배열을 나타내지 만 unpack 입니다.  입력 문자열이 필요합니다. 배열을 그대로 유지하면 PHP는 숫자를 문자열로 변환하는 것 같습니다 .101은 '101'이며 이는 3 바이트이며 이는 모든 것을 분해합니다.

    먼저 숫자를 바이트로 변환해야합니다. 바이트는 본질적으로 unsigned char 입니다  먼저 배열을 부호없는 문자로 묶은 다음 압축을 풉니 다.

    $bytes = [101,102,54,55,99,55,56,49];
    $unpacked = unpack("J", pack('C*', ...$bytes));
    echo current($unpacked);
    
    

    설명 :

    C  서명되지 않은 char 및 * 의 팩 코드입니다.  모든 배열 항목을 사용해야 함을 나타냅니다. 배열을 기반으로 문자열을 생성합니다. 그런 다음 J 를 사용하여이 문자열의 압축을 풀 수 있습니다.  (바이트가 빅 엔디안 바이트 순서로 생성되었다는 사실을 알고있는 경우) 또는 P  바이트가 리틀 엔디안 순서 또는 Q 로 생성되었다는 것을 알고 있다면  기계 주문을 사용하려는 경우. 바이트가 동일한 머신에서 생성 된 경우 Q  아마도 J 보다 더 나은 선택 일 것입니다  그렇지 않으면 endianess를 알아야합니다.

    예 : http://sandbox.onlinephpfunctions.com/code/5cba2c29522f7b9f9a0748b99fac768012e759ce

    참고 : 이것은 현재 일어나고있는 일에 대한 개인적인 이해입니다. 따라서 더 나은 포장/포장 풀기 지식을 가진 사람은 내가 잘못한 것을 알려주십시오.

  • 이전 모든 메소드가 정적 인 Java 클래스
  • 다음 c# - 트 리뷰 업데이트가 포함 된 SQL 데이터 리더