在PHP中像Java一样操作字节
我有一个Java函数,我需要一个PHP中的等效函数。如果有帮助的话,我用这个来解析MD5散列在PHP中像Java一样操作字节,java,php,string,byte,Java,Php,String,Byte,我有一个Java函数,我需要一个PHP中的等效函数。如果有帮助的话,我用这个来解析MD5散列 public static byte[] asBin(String paramString) { if (paramString.length() < 1) return null; byte[] arrayOfByte = new byte[paramString.length() / 2]; for (int i = 0; i < paramStrin
public static byte[] asBin(String paramString)
{
if (paramString.length() < 1)
return null;
byte[] arrayOfByte = new byte[paramString.length() / 2];
for (int i = 0; i < paramString.length() / 2; i++) {
int j = Integer.parseInt(paramString.substring(i * 2, i * 2 + 1), 16);
int k = Integer.parseInt(paramString.substring(i * 2 + 1, i * 2 + 2), 16);
arrayOfByte[i] = ((byte)(j * 16 + k));
}
return arrayOfByte;
}
公共静态字节[]asBin(字符串paramString)
{
if(paramString.length()<1)
返回null;
byte[]arrayOfByte=新字节[paramString.length()/2];
对于(int i=0;i
现在我得到了这个,但输出结果不一样
function asBin($str){
if($str == "") return null;
$bytes = array();
for($i = 0; $i < strlen($str) / 2; $i++){
$j = intval(substr($str, $i * 2, $i * 2 + 1), 16);
$k = intval(substr($str, $i * 2 + 1, $i * 2 + 2), 16);
$bytes[$i] = intval($j * 16 + $k);
}
return $bytes;
}
函数asBin($str){
如果($str==“”)返回null;
$bytes=array();
对于($i=0;$i
这就是答案(您需要在代码中添加一些更改):
function asBin($str) {
$byte_max = 127;
$byte_min = -128;
if($str == "") {
return null;
}
$bytes = array();
for($i = 0; $i < floor(strlen($str) / 2); $i++){
$j = intval(substr($str, $i * 2, 1), 16);
$k = intval(substr($str, $i * 2 + 1, 1), 16);
$value = $j * 16 + $k;
// emulation byte-overflow in java
if ($value > $byte_max) {
$value = $value - $byte_max + $byte_min - 1;
}
$bytes[$i] = $value;
}
return $bytes;
}
我们有:
$bin_map = array(
"00" => 0,
"01" => 1,
...
"80" => -128,
"81" => -127,
"82" => -126,
"83" => -125,
...
);
这就是答案(您需要在代码中添加一些更改):
function asBin($str) {
$byte_max = 127;
$byte_min = -128;
if($str == "") {
return null;
}
$bytes = array();
for($i = 0; $i < floor(strlen($str) / 2); $i++){
$j = intval(substr($str, $i * 2, 1), 16);
$k = intval(substr($str, $i * 2 + 1, 1), 16);
$value = $j * 16 + $k;
// emulation byte-overflow in java
if ($value > $byte_max) {
$value = $value - $byte_max + $byte_min - 1;
}
$bytes[$i] = $value;
}
return $bytes;
}
我们有:
$bin_map = array(
"00" => 0,
"01" => 1,
...
"80" => -128,
"81" => -127,
"82" => -126,
"83" => -125,
...
);
或者仅仅使用可能是当您将int
转换为byte
(请参见(byte)(j*16+k)
)时您有溢出(在java代码中),或者仅仅使用可能是当您将int
转换为byte
(请参见(byte)(j*16+k)
)时您有溢出(在java代码中)