0

PHP のこの行を Java に変換するのに助けが必要ですpack( 'N', $data )

$data は 7 ~ 9 文字の数字で、最後の文字は null にする必要があります

その関数を通過した後、それは long にパックされると思います。

これは、ソケットを介してこれを実行するサーバーにプッシュされます。

byte[] abyte = datagrampacket.getData();
c(abyte, 7, datagrampacket.getLength())

c(...) は次のとおりです。

public static int c(byte[] abyte, int i, int j) {
    return 0 > j - i - 4 ? 0 : abyte[i] << 24 | (abyte[i + 1] & 255) << 16 | (abyte[i + 2] & 255) << 8 | abyte[i + 3] & 255;
}

上記の関数は、元の $data に展開するだけだと思います

Javaで「パック」する方法を知っている人はいますか?

編集:phpを介してデータに対して行うこと:

Stripped Received Data:
array
  0 => string '13231786�' (length=9)
  1 => string '/31/33/32/33/31/37/38/36/0' (length=26) <--- dechex(ord()) for each char above
Packed Data:
array
  0 => string '�Éæª' (length=4)
  1 => string '/0/c9/e6/aa' (length=11) <--- dechex(ord()) for each char above
4

2 に答える 2

1

もう 1 つのオプションは、PHP/Perl の pack/unpack の Java Gistと同様の方法で ByteBuffer を使用することです。

static String packN(int value) {
    byte[] bytes = ByteBuffer.allocate(4).putInt(new Integer(value)).array();
    return new String(bytes, 'UTF-8');
}

static int unpackN(String value) {
    return ByteBuffer.wrap(value.bytes).getInt();
}
于 2014-01-13T17:06:38.460 に答える