Pergunta

Como posso obter a matriz de bytes de uma string que pode conter números, letras e assim por diante? Se você está familiarizado com Java, eu estou olhando para a mesma funcionalidade dos getBytes () método.

Eu tentei um trecho como este:

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

mas sem sucesso, portanto, qualquer tipo de ajuda será apreciada.

PS: Por que eu preciso esta em tudo !? Bem, eu preciso enviar um array de bytes via fputs () para um servidor escrito em Java ...

Foi útil?

Solução

@Sparr é certo, mas eu acho que você esperava matriz de bytes como byte[] em C #. É a mesma solução que Sparr fez mas em vez de HEX você esperava apresentação int ( faixa de 0 a 255 ) de cada char. Você pode fazer o seguinte:

$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

Ao usar var_dump você pode ver que os elementos são int ( não 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) }

Tenha cuidado: a matriz de saída é de índice com base em 1 (como foi salientado no comentário)

Outras dicas

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

Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 

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

Você pode dividir o resultado em pedaços de dois hex-caráter, se necessário.

Você poderia tentar o seguinte:

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

Em PHP, strings são bytestreams. O que exatamente você está tentando fazer?

Re: editar

Ps. Por que eu preciso esta em tudo !? Bem, eu preciso enviar via fputs () bytearray para servidor escrito em java ...

fputs recebe uma string como argumento. Muito provavelmente, você só precisa passar o seu corda para ele. No lado Java de coisas, você deve decodificar os dados em qualquer codificação, você está usando em php (o padrão é iso-8859-1).

PHP não tem nenhum tipo byte explícito, mas a sua string já é o equivalente a matriz de bytes de Java. Você pode seguramente escrever fputs($connection, "The quick brown fox …"). A única coisa que você deve estar ciente de codificação de caracteres, eles devem ser os mesmos em ambos os lados. Use mb_convert_encoding () quando em dúvida.

Eu encontrei várias funções definidas em http://tw1.php.net/unpack são muito úteis .
Podem converter a cadeia matriz de bytes e vice-versa.

Tome byteStr2byteArray () como um exemplo:

<?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]);
}
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top