Frage

Wie kann ich den Byte-Array von einer Zeichenkette, die Zahlen, Buchstaben und so weiter enthalten kann? Wenn Sie mit Java vertraut sind, ich bin für die gleiche Funktionalität des getBytes () -Methode.

Ich habe versucht, einen Ausschnitt wie diese:

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

aber ohne Erfolg, so dass jede Art von Hilfe wird geschätzt.

PS: Warum muss ich das überhaupt !? Nun, ich brauche einen Byte-Array über fputs senden () an einen Server in Java geschrieben ...

War es hilfreich?

Lösung

@Sparr ist richtig, aber ich denke, Sie Byte-Array erwartet wie byte[] in C #. Es ist die gleiche Lösung wie Sparr tat aber statt HEX erwarten Sie int Präsentation ( Bereich von 0 bis 255 ) jeden char. Sie können wie folgt vorgehen:

$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

Mit dem var_dump verwenden, können Sie sehen, dass Elemente sind int ( nicht 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) }

Seien Sie vorsichtig: der Ausgabe-Array von 1-basierten Index (wie es in dem Kommentar darauf hingewiesen)

Andere Tipps

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

Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 

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

Sie können das Ergebnis in zwei-hex-Zeichen Stücke geteilt, wenn nötig.

Sie könnten versuchen, diese:

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

In PHP Strings sind Bytestreams. Was genau wollen Sie tun?

Re: bearbeiten

  

Ps. Warum muss ich dies überhaupt !? Nun muss ich über fputs senden () bytearray auf Server in Java geschrieben ...

fputs braucht eine Zeichenkette als Argument. Wahrscheinlich brauchen Sie nur, um es Ihre Zeichenfolge zu übergeben. Auf der Java-Seite der Dinge, sollten Sie die Daten in beliebiger Codierung entschlüsseln, verwenden Sie in PHP (die Standardeinstellung ist iso-8859-1).

PHP hat keinen expliziten byte Typen, aber sein string ist bereits die äquivalent von Java Byte-Array. Sie können sicher fputs($connection, "The quick brown fox …") schreiben. Das einzige, was Sie von Codierung ist Charakter bewusst sein müssen, müssen sie die auf beiden Seiten gleich sein. Verwenden Sie mb_convert_encoding () wenn im Zweifel.

Ich fand definiert mehr Funktionen in http://tw1.php.net/unpack sind sehr nützlich .
Sie können String verdeckte auf Array Byte und umgekehrt.

Nehmen Sie byteStr2byteArray () als Beispiel:

<?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]);
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top