繁体   English   中英

PHP中的字符串到字节数组

[英]String to byte array in php

如何从某个包含数字,字母等的字符串中获取字节数组? 如果您熟悉Java,那么我正在寻找与getBytes()方法相同的功能。

我尝试了如下代码段:

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

但没有成功,因此将不胜感激。

PS:为什么我完全需要这个! 好吧,我需要通过fputs()将字节数组发送到用Java编写的服务器...

@Sparr是正确的,但是我想您应该在C#中期望像byte[]这样的byte[]数组。 它与Sparr的解决方案相同,但是您期望每个char int表示形式( 范围从0到255 )而不是HEX。 您可以执行以下操作:

$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,...

如有必要,可以将结果分成两个十六进制字符块。

PHP没有显式的byte类型,但是它的string已经等效于Java的字节数组。 您可以放心地写fputs($connection, "The quick brown fox …") 您唯一需要了解的是字符编码,它们的两侧必须相同。 如有疑问,请使用mb_convert_encoding()

您可以尝试以下方法:

$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中,字符串是字节流。 您到底想做什么?

回复:编辑

附言 为什么我完全需要这个! 好吧,我需要通过fputs()字节数组发送到用Java编写的服务器...

fputs以字符串作为参数。 最有可能的是,您只需要将字符串传递给它即可。 在Java方面,您应该使用在php中使用的任何编码对数据进行解码(默认为iso-8859-1)。

我发现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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM