0

1 つのアプリを 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で翻訳する方法がわからない...何度も試してみたので、気が狂いそうです! eval("\$hex = 0x" . $dati[$i].$dati[$i+1] . ";");これとこれ$binary_string = pack("h*" , $dati[$i].$dati[$i+1]);、および他の多くの関数を使用して、forサイクルを試しました...

誰かがJavaを理解し、私を助けることができれば、私はそれを感謝します!!

みんなありがとう!

4

2 に答える 2

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 に答える
0

ここを見てください:

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

これはまさにあなたが探しているものではありませんか?

于 2012-07-30T18:08:15.933 に答える