복붙노트

PHP에서 문자열을 바이트 배열로

PHP

PHP에서 문자열을 바이트 배열로

숫자, 문자 등을 포함 할 수있는 문자열에서 바이트 배열을 가져 오는 방법은 무엇입니까? Java에 익숙하다면 getBytes () 메소드와 동일한 기능을 찾고 있습니다.

이 스 니펫을 다음과 같이 시도했습니다.

for($i = 0; $i < strlen($msg); $i++){
    $data.=ord($msg[$i]);
        //or $data[]=ord($msg[$1]); 
}

그러나 성공이 없으면 어떤 종류의 도움도받을 수 있습니다.

추신 : 나는 왜 이것을 전혀 필요로하지 않습니까? 음, 자바로 작성된 서버에 fputs ()를 통해 바이트 배열을 보내야합니다 ...

해결법

  1. ==============================

    1.@ Paral은 맞습니다.하지만 C #에서 byte []와 같은 바이트 배열을 사용해야합니다. 그것은 Sparr과 같은 솔루션이지만 HEX 대신에 각 문자의 int 프리젠 테이션 (0에서 255까지의 범위)을 기대했습니다. 다음과 같이 할 수 있습니다.

    @ Paral은 맞습니다.하지만 C #에서 byte []와 같은 바이트 배열을 사용해야합니다. 그것은 Sparr과 같은 솔루션이지만 HEX 대신에 각 문자의 int 프리젠 테이션 (0에서 255까지의 범위)을 기대했습니다. 다음과 같이 할 수 있습니다.

    $byte_array = unpack('C*', 'The quick fox jumped over the lazy brown dog');
    var_dump($byte_array);  // $byte_array should be int[] which can be converted
                            // to byte[] in C# since values are range of 0 - 255
    

    var_dump를 사용하면 요소가 int (문자열이 아님)임을 알 수 있습니다.

       array(44) {  [1]=>  int(84)  [2]=>  int(104) [3]=>  int(101) [4]=>  int(32)
    [5]=> int(113)  [6]=>  int(117) [7]=>  int(105) [8]=>  int(99)  [9]=>  int(107)
    [10]=> int(32)  [11]=> int(102) [12]=> int(111) [13]=> int(120) [14]=> int(32)
    [15]=> int(106) [16]=> int(117) [17]=> int(109) [18]=> int(112) [19]=> int(101)
    [20]=> int(100) [21]=> int(32)  [22]=> int(111) [23]=> int(118) [24]=> int(101)
    [25]=> int(114) [26]=> int(32)  [27]=> int(116) [28]=> int(104) [29]=> int(101)
    [30]=> int(32)  [31]=> int(108) [32]=> int(97)  [33]=> int(122) [34]=> int(121)
    [35]=> int(32)  [36]=> int(98)  [37]=> int(114) [38]=> int(111) [39]=> int(119)
    [40]=> int(110) [41]=> int(32)  [42]=> int(100) [43]=> int(111) [44]=> int(103) }
    
  2. ==============================

    2.

    print_r(unpack("H*","The quick fox jumped over the lazy brown dog"))
    
    Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 
    

    T = 0x54, h = 0x68, ...

    필요한 경우 결과를 2 개의 16 진 문자 청크로 나눌 수 있습니다.

  3. ==============================

    3.당신은 이것을 시도 할 수 있습니다 :

    당신은 이것을 시도 할 수 있습니다 :

    $in_str = 'this is a test';
    $hex_ary = array();
    foreach (str_split($in_str) as $chr) {
        $hex_ary[] = sprintf("%02X", ord($chr));
    }
    echo implode(' ',$hex_ary);
    
  4. ==============================

    4.PHP에서 문자열은 bytestreams입니다. 너 정확히 뭘 하려구?

    PHP에서 문자열은 bytestreams입니다. 너 정확히 뭘 하려구?

    다시 : 편집

    fputs는 문자열을 인수로 사용합니다. 대부분의 경우 문자열을 전달해야합니다. 자바 측에서는 PHP에서 사용하는 인코딩에 상관없이 데이터를 디코딩해야합니다 (기본값은 iso-8859-1).

  5. ==============================

    5.PHP에는 명시 적 바이트 유형이 없지만 해당 문자열은 이미 Java의 바이트 배열과 동일합니다. fputs ($ connection, "The quick brown fox ...")를 안전하게 작성할 수 있습니다. 당신이 알아야 할 유일한 것은 문자 인코딩입니다, 그들은 양쪽에서 동일해야합니다. 의심스러운 경우 mb_convert_encoding ()을 사용하십시오.

    PHP에는 명시 적 바이트 유형이 없지만 해당 문자열은 이미 Java의 바이트 배열과 동일합니다. fputs ($ connection, "The quick brown fox ...")를 안전하게 작성할 수 있습니다. 당신이 알아야 할 유일한 것은 문자 인코딩입니다, 그들은 양쪽에서 동일해야합니다. 의심스러운 경우 mb_convert_encoding ()을 사용하십시오.

  6. ==============================

    6.http://tw1.php.net/unpack에 정의 된 여러 함수가 매우 유용하다는 것을 알았습니다. 문자열을 바이트 배열로 또는 그 반대로 변환 할 수 있습니다.

    http://tw1.php.net/unpack에 정의 된 여러 함수가 매우 유용하다는 것을 알았습니다. 문자열을 바이트 배열로 또는 그 반대로 변환 할 수 있습니다.

    byteStr2byteArray ()를 예로 들어 보겠습니다.

    <?php
    function byteStr2byteArray($s) {
        return array_slice(unpack("C*", "\0".$s), 1);
    }
    
    $msg = "abcdefghijk";
    $byte_array = byteStr2byteArray($msg);
    
    for($i=0;$i<count($byte_array);$i++)
    {
       printf("0x%02x ", $byte_array[$i]);
    }
    ?>
    
  7. from https://stackoverflow.com/questions/885597/string-to-byte-array-in-php by cc-by-sa and MIT license