题
我怎样才能获得一些字符串,可以包含数字,字母等字节数组? 如果你熟悉Java,我寻找的getBytes的相同的功能()方法。
我试图像这样的一个片段:
for($i = 0; $i < strlen($msg); $i++){
$data.=ord($msg[$i]);
//or $data[]=ord($msg[$1]);
}
但没有成功,因此任何种类的帮助将不胜感激。
PS:为什么我需要这在所有!?嗯,我需要通过的fputs(),以用Java编写的服务器发送一个字节数组...
解决方案
@Sparr是正确的,但我想你预期字节数组像在C#byte[]
。这是相同的解决方案SPARR做,而是HEX您预期int
呈现每个char
的(的范围从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) }
注意:输出数组是基于1的索引的(因为它是在注释中指出)
其他提示
print_r(unpack("H*","The quick fox jumped over the lazy brown dog"))
Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 )
T = 0x54,H = 0x68,...
可以在必要时的结果分成两个 - 己字符块。
您可以试试这个:
$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,字符串是字节流。究竟是什么你想怎么办?
回复:编辑
聚苯乙烯。为什么我需要这在所有!?嗯,我需要通过java编写的fputs()ByteArray的服务器发送...
fputs
接受一个字符串作为参数。最有可能的,你只需要你的字符串传递给它。对事物的Java端,你应该对数据进行解码的任何编码,您使用的是PHP(默认为ISO-8859-1)。
PHP没有明确byte
类型,但其string
已经是Java的字节数组的等价物。您可以放心地写fputs($connection, "The quick brown fox …")
。你必须知道的唯一的事情就是字符编码,它们必须是双方的相同。当使用 mb_convert_encoding()疑问。
我发现了几个功能是非常有用的。结果 它们可以隐蔽字符串字节数组,并且反之亦然。
取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]);
}
?>