0

我正在将一个应用程序从 java 转换为 php,但遇到了一些麻烦。

我有一个这样的字符串98191107990D0000EF050000789C65970BCCD75318C7CFEFFC......在java中有这个函数,我将此字符串作为参数传递:

private static byte[] decodeNibbleHex(String input)
  {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    char[] chars = input.toCharArray();
    for (int i = 0; i < chars.length - 1; i += 2) {
      char[] bChars = new char[2];
      bChars[0] = chars[i];
      bChars[1] = chars[(i + 1)];
      int val = Integer.decode("0x" + new String(bChars)).intValue();
      baos.write((byte)val);
    }
    return baos.toByteArray();
  }

但是......我不知道用PHP翻译这个函数......我尝试了太多次,我变得疯狂!我尝试使用 for 循环,使用 thiseval("\$hex = 0x" . $dati[$i].$dati[$i+1] . ";");和 this$binary_string = pack("h*" , $dati[$i].$dati[$i+1]);以及许多其他功能......

如果有人了解 Java 并且可以帮助我,我将不胜感激!

谢谢大家!

4

2 回答 2

0

看看这里:

http://www.php.net/manual/de/function.hexdec.php#100578

这不正是您想要的吗?

于 2012-07-30T18:08:15.933 回答
0

如果我对您的 java 函数的理解是正确的,它将成对地获取字符串的字符,并将它们作为字节威胁并将它们放入 ByteArray 中。在 php 中没有字节数组之类的东西,但您可以在日常字符串中表示随机二进制数据。这是我对您的功能的看法(没有尝试与 java 代码的输出进行比较)。

$str= '98191107990D0000EF050000789C65970BCCD75318C7CFEFFC';

$output[] = array();
for ($i=0, $c = strlen($str) - 1; $i < $c; $i+=2) {
    $output[] = chr(intval($str[$i].$str[$i+1], 16));
}

print join($output); // binary string, not really useful in ascii terminal (-:

总之,这似乎是一个base16_decode()函数,base16_encode()如下所示,您将返回输入字符串:

function base16_encode($str) {
    $byteArray = str_split($str);
    foreach ($byteArray as &$byte) {
        $byte = sprintf('%02x', ord($byte));
    }   
    return join($byteArray);
}
print base16_encode(join($output)); // should print back the original input.
于 2012-07-30T18:09:54.197 回答