Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java到PHP的半字节十六进制_Java_Php_Hex - Fatal编程技术网

从Java到PHP的半字节十六进制

从Java到PHP的半字节十六进制,java,php,hex,Java,Php,Hex,我正在将一个应用程序从java翻译成php,我发现了一些问题 我有这样一个字符串98191107990D0000EF05000789C65970BCCD75318C7CFEFFC。。。在java中,有一个函数,我将此字符串作为参数传递: private static byte[] decodeNibbleHex(String input) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); char[] ch

我正在将一个应用程序从java翻译成php,我发现了一些问题

我有这样一个字符串
98191107990D0000EF05000789C65970BCCD75318C7CFEFFC
。。。在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();
  }
private static byte[]decodeNibbleHex(字符串输入)
{
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
char[]chars=input.toCharArray();
对于(int i=0;i
但是。。。我不知道如何用PHP翻译这个函数。。。我试了太多次,我都快疯了!我尝试了一个for循环,使用这个
eval(\$hex=0x.“$dati[$i]。$dati[$i+1]。”;”)
和这个
$binary_string=pack(“h*”,$dati[$i]。$dati[$i+1])和许多其他函数

如果有人懂Java并能帮助我,我将不胜感激

谢谢大家

看看这里:


这不正是您要寻找的吗?

如果我对java函数的理解是正确的,它会将字符串的字符成对使用,并将它们作为字节进行威胁,然后将它们放入字节数组中。在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 (-:
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.