string到PHP中的字节数组
如何从一些可以包含数字,字母等的string中获取字节数组? 如果您熟悉Java,我正在寻找getBytes()方法的相同function。
我尝试了这样一个片段:
for($i = 0; $i < strlen($msg); $i++){ $data.=ord($msg[$i]); //or $data[]=ord($msg[$1]); }
但没有成功,所以任何forms的帮助将不胜感激。
PS:为什么我需要这个!? 那么,我需要通过fputs()发送一个字节数组到Java编写的服务器…
@Sparr是正确的,但我想你期望在C#中像byte[]
字节数组。 这与Sparr的解决scheme是一样的,但不是HEX,而是预期每个char
int
presentation( 范围从0到255 )。 你可以这样做:
$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) }
print_r(unpack("H*","The quick fox jumped over the lazy brown dog")) Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 )
T = 0x54,h = 0x68,…
如有必要,可以将结果拆分为两个hex字符的块。
你可以试试这个:
$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中,string是字节stream。 你到底在做什么?
Re:编辑
PS。 为什么我需要这个呢? 那么我需要通过fputs()bytearray发送到java写的服务器…
fputs
将一个string作为参数。 最有可能的是,你只需要把你的string传递给它。 在Java的一面,你应该以任何编码解码数据,你在php中使用(默认是iso-8859-1)。
PHP没有明确的byte
types,但是它的string
已经是Java的字节数组了。 你可以安全地写fputs($connection, "The quick brown fox …")
。 唯一必须注意的是字符编码,它们在两边必须是相同的。 如有疑问,请使用mb_convert_encoding() 。
我发现http://tw1.php.net/unpack中定义的几个函数是非常有用的。;
它们可以将string转换为字节数组,反之亦然。
以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]); } ?>