Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
Python字节对象与java_Java_Python - Fatal编程技术网

Python字节对象与java

Python字节对象与java,java,python,Java,Python,早上好,我有一个关于python中字节对象(表示为b'')和如何在java中复制它之间差异的快速问题 我正在做的项目是在一个模拟服务器上为一个死亡游戏做一些个人工作,以提高我的反转技能。我有一个python项目的工作格式副本,但我想切换到java,因为我对该语言的使用更好,并且它附带了许多对这样的项目有用的附加工具 我正在使用ServerSocket捕获java项目中的TCP数据 当数据从Python项目通过网络传输时,看起来有点像这样: 当我通过java ServerSocket捕获相同的数

早上好,我有一个关于python中字节对象(表示为b'')和如何在java中复制它之间差异的快速问题

我正在做的项目是在一个模拟服务器上为一个死亡游戏做一些个人工作,以提高我的反转技能。我有一个python项目的工作格式副本,但我想切换到java,因为我对该语言的使用更好,并且它附带了许多对这样的项目有用的附加工具

我正在使用ServerSocket捕获java项目中的TCP数据

当数据从Python项目通过网络传输时,看起来有点像这样:

当我通过java ServerSocket捕获相同的数据时,我得到如下结果:

我的问题是如何重新格式化这个ASCII文本,以获得软件python版本中所看到的正确数据

目前,我能够获得如下输出:

通过转换ServerSocket中的字节[]数据

while(true) {
        try {
            Socket socket = serverSocket.accept();
            onConnection(socket);

            byte[] incomingData = new byte[0];
            byte[] temp = new byte[1024];
            int k = -1;

            //this is due to the client of said game not sending EOL (readLine() does not work here)
            while((k = socket.getInputStream().read(temp, 0, temp.length)) > -1) {
                byte[] tbuff = new byte[incomingData.length + k];
                System.arraycopy(incomingData, 0, tbuff, 0, incomingData.length);
                System.arraycopy(temp, 0, tbuff, incomingData.length, k);
                incomingData = tbuff;

                receiveData(socket, incomingData); <--- this is the important bit
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

public void receiveData(Socket socket, byte[] data) {
    int lenLo = (int) (data[0]);
    int lenHi = (int) (data[1]);
    int length = lenHi * 256 + lenLo;


    if(lenHi < 0) {
        System.out.println("Invalid Packet Length");
    }

    if(data.length != length) {
        System.out.println("Incomplete Packet Received");
    }

    try {
        String test = new String(data, "UTF-8");

        serverGUI.serverDebug(test); //produces the string in a jframe (pic 2)
        serverGUI.debugByteArray(test.getBytes(StandardCharsets.UTF_8)); //produces the byte[] in jframe (pic 3 -- all bytes in this array are & 0xff prior to being printed out)
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
while(true){
试一试{
Socket=serverSocket.accept();
未连接(插座);
字节[]输入数据=新字节[0];
字节[]临时=新字节[1024];
int k=-1;
//这是由于上述游戏的客户端未发送EOL(readLine()在此不起作用)
而((k=socket.getInputStream().read(temp,0,temp.length))>-1){
byte[]tbuff=新字节[incomingData.length+k];
System.arraycopy(incomingData,0,tbuff,0,incomingData.length);
系统阵列副本(温度,0,tbuff,输入数据长度,k);
incomingData=tbuff;

receiveData(socket,incomingData);不完全清楚您在问什么。您是在问如何漂亮地打印包含不可打印字符的二进制数据,即复制Python在向控制台打印ByTestStream时使用的格式?如果是,请参阅或
String.format(“\x%02x”,byteValue)
如果我不清楚,很抱歉……回头看,我不清楚。java输出中似乎有额外的空间?这些数据被输入到使用相同参数(ecb——无填充)的河豚解密中,python生成正确的输出数据,而java不生成。软件的两个格式副本也使用相同的解密密钥“java输出中似乎有额外的空格”是吗?示例中的空格似乎对应于python字符串中的\t字符。我建议打印一个标准的十六进制表示法(所有内容都是十六进制的-与当前python示例不同)在两种语言中进行比较。好的,研究表明java Blowfish引擎使用Blowfish compat?我认为区别本质上是endianness。python实现使用小endian字节顺序,并且数据是这样传输的。你知道一种使用小endian字节顺序在java中解码Blowfish的方法吗?Orde在bytebuffer中输入数据似乎不会产生正确的输出。这是一个完全不同的问题,应该单独提出。不完全清楚你在问什么。你是在问如何漂亮地打印包含不可打印字符的二进制数据,即复制Python在打印bytest时使用的格式吗ream到控制台?如果是,请参阅或
String.format(“\x%02x”,byteValue);
如果我不清楚,很抱歉……回头看,我不清楚。java输出中似乎有额外的空间?这些数据正在使用相同的参数输入河豚解密(ecb——无填充),python生成正确的输出数据,而java没有。软件的两个格式副本也使用相同的解密密钥“java输出中似乎有额外的空格”是吗?示例中的空白似乎对应于python字符串中的\t字符。我建议打印标准十六进制表示法(所有内容都转换为十六进制-与当前python示例不同)在两种语言中进行比较。好的,研究表明java Blowfish引擎使用Blowfish compat?我认为区别本质上是endianness。python实现使用小endian字节顺序,并且数据是这样传输的。你知道一种使用小endian字节顺序在java中解码Blowfish的方法吗?Orde在bytebuffer中输入数据似乎不会产生正确的输出。这是一个完全不同的问题,应该单独提出。