문제

숫자, 문자 등을 포함 할 수있는 일부 문자열에서 바이트 배열을 어떻게 얻을 수 있습니까? Java에 익숙하다면 GetBytes () 메소드의 동일한 기능을 찾고 있습니다.

나는 이와 같은 스 니펫을 시도했다.

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

그러나 성공하지 못하면 어떤 종류의 도움도 감사 할 것입니다.

추신 : 왜 이것을 필요로합니까!? 글쎄, 나는 Java로 작성된 서버로 fputs ()를 통해 바이트 배열을 보내야합니다 ...

도움이 되었습니까?

해결책

@SPARR이 옳지 만 바이트 배열이 예상되는 것 같아요 byte[] C#에서. Sparr와 같은 솔루션이지만 16 진수 대신에 int 프레젠테이션 (0에서 255 사이입니다각각의 char. 다음과 같이 할 수 있습니다.

$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 (~ 아니다 string).

   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) }

조심하십시오 : 출력 배열은 1 기반 인덱스입니다 (주석에서 지적한대로).

다른 팁

print_r(unpack("H*","The quick fox jumped over the lazy brown dog"))

Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 

t = 0x54, h = 0x68, ...

필요한 경우 결과를 2 헥스-문자 덩어리로 분할 할 수 있습니다.

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

$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);

PHP에서 문자열은 바이트 스트림입니다. 정확히 무엇을하려고합니까?

Re : 편집

추신. 왜 이것을 필요로합니까!? 글쎄, 나는 Java로 작성된 서버로 fputs () bytearray를 통해 보내야합니다 ...

fputs 문자열을 인수로 취합니다. 아마도, 당신은 당신의 줄을 전달하면됩니다. Java 측면에서 인코딩에서 데이터를 디코딩해야합니다. PHP에서 사용 중입니다 (기본값은 ISO-8859-1입니다).

PHP는 명시 적이 없습니다 byte 유형이지만 string 이미 Java의 바이트 어레이와 동일합니다. 당신은 안전하게 쓸 수 있습니다 fputs($connection, "The quick brown fox …"). 당신이 알아야 할 유일한 것은 문자 인코딩입니다. 양쪽에서 동일해야합니다. 사용 mb_convert_encoding () 확실하지 않을 때에는.

몇 가지 기능이 정의 된 것을 발견했습니다 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]);
}
?>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top