在PHP中像Java一样操作字节

在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

我有一个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 < 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代码中)