Domanda

Come posso ottenere l'array di byte da qualche stringa che può contenere numeri, lettere e così via? Se si ha familiarità con Java, sto cercando la stessa funzionalità delle getBytes () metodo.

Ho provato un frammento di come questo:

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

, ma senza successo, in modo che qualsiasi tipo di aiuto sarà apprezzato.

PS: Perché ho bisogno di questo a tutti !? Beh, ho bisogno di inviare un array di byte tramite fputs () a un server scritto in Java ...

È stato utile?

Soluzione

@Sparr è giusto, ma credo che vi aspettavate array di byte come byte[] in C #. E 'la stessa soluzione come fece Sparr ma invece di HEX si aspettava presentazione int ( gamma da 0 a 255 ) di ciascun char. Si può fare nel seguente modo:

$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

Utilizzando var_dump si può vedere che gli elementi sono int ( non 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) }

Attenzione: l'array di uscita è di indice 1-based (come è stato sottolineato nel commento)

Altri suggerimenti

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

Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 

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

È possibile dividere il risultato in blocchi di due esagoni caratteri, se necessario.

Si potrebbe provare questo:

$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, le stringhe sono bytestreams. Che cosa stai cercando di fare?

Re: modifica

  

Ps. Perché ho bisogno di questo a tutti !? Beh ho bisogno di inviare via fputs () ByteArray al server scritto in Java ...

fputs prende una stringa come argomento. Molto probabilmente, non vi resta che passare la stringa ad esso. Sul lato Java delle cose, si dovrebbe decodificare i dati in qualsiasi codifica, si sta utilizzando in php (l'impostazione predefinita è iso-8859-1).

PHP non ha alcun tipo byte esplicito, ma la sua string è già l'equivalente di array di byte di Java. Si può tranquillamente scrivere fputs($connection, "The quick brown fox …"). L'unica cosa che si deve essere consapevoli è la codifica dei caratteri, devono essere lo stesso su entrambi i lati. Utilizzare mb_convert_encoding () in caso di dubbio.

ho trovato diverse funzioni definite in http://tw1.php.net/unpack sono molto utili .
Possono occulta stringa byte matrice e viceversa.

Prendere byteStr2byteArray () come esempio:

<?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]);
}
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top