Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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
PHP';Java中的s包(";N";,$str)_Java_Php_Pack - Fatal编程技术网

PHP';Java中的s包(";N";,$str)

PHP';Java中的s包(";N";,$str),java,php,pack,Java,Php,Pack,我需要帮助将这行PHP翻译成Javapack('N',$data) $data应为7-9个数字字符,最后一个为空 我想在完成那个功能之后,它会被打包成一个很长的文件 将通过套接字推送到将运行以下操作的服务器: byte[] abyte = datagrampacket.getData(); c(abyte, 7, datagrampacket.getLength()) c(…)如下所示: public static int c(byte[] abyte, int i, int j) {

我需要帮助将这行PHP翻译成Java
pack('N',$data)

$data应为7-9个数字字符,最后一个为空

我想在完成那个功能之后,它会被打包成一个很长的文件

将通过套接字推送到将运行以下操作的服务器:

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;
}
公共静态int c(字节[]abyte,int i,int j){

返回0>j-i-4?0:abyte[i]string'/0/c9/e6/aa'(长度=11)经过一天的数学计算,我已经算出了。现在我已经算出了,其实很简单

在java中:

int x = (int) Math.floor(j/2^16);
int y = (int) Math.floor((j-(x*65536))/2^8);
int z = (int) Math.floor(j-((x*2^16)+(y*2^8)));

x = 2nd character
y = 3rd character
z = 4th character

这些数字是三位数,因此您需要将其转换为十六进制。仅供碰巧遇到这个问题的人参考。

另一个选项是以类似于以下的方式使用ByteBuffer:


随着值的增加,上面的代码开始失败。请参阅。
int x = (int) Math.floor(j/2^16);
int y = (int) Math.floor((j-(x*65536))/2^8);
int z = (int) Math.floor(j-((x*2^16)+(y*2^8)));

x = 2nd character
y = 3rd character
z = 4th character
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();
}