如何从包含数字,字母等的字符串中获取字节数组?如果您熟悉Java,我正在寻找getBytes()方法的相同功能.
我尝试了一个像这样的片段:
for($i = 0; $i < strlen($msg); $i++){
$data.=ord($msg[$i]);
//or $data[]=ord($msg[$1]);
}
Run Code Online (Sandbox Code Playgroud)
但没有成功,所以任何形式的帮助将不胜感激.
PS:为什么我需要这个!?好吧,我需要通过fputs()将一个字节数组发送到用Java编写的服务器...
Bro*_*nek 76
@Sparr是对的,但我猜你byte[]在C#中期望字节数组.它与Sparr的解决方案相同,但不是HEX,而是预期每种方式的int呈现方式(范围从0到255)char.你可以这样做:
$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
Run Code Online (Sandbox Code Playgroud)
通过使用,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) }
Run Code Online (Sandbox Code Playgroud)
注意:输出数组是基于1的索引(正如在注释中指出的那样)
Spa*_*arr 26
print_r(unpack("H*","The quick fox jumped over the lazy brown dog"))
Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 )
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
PHP没有显式byte类型,但它string已经相当于Java的字节数组.你可以安全地写fputs($connection, "The quick brown fox …").您必须注意的唯一事情是字符编码,它们必须在两侧都相同.遇到疑问时请使用mb_convert_encoding().
在PHP中,字符串是字节流.你究竟想做什么?
回复:编辑
PS.为什么我需要这个!?好吧,我需要通过fputs()bytearray发送到用java编写的服务器...
fputs将字符串作为参数.最有可能的是,你只需要将字符串传递给它.在Java方面,您应该以任何编码解码数据,您在php中使用(默认为iso-8859-1).