Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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中为幻数设置4字节位模式? 我正在使用C++在Linux机器上进行网络编程,我想知道如何在java(客户端)中设置神奇数字的4字节位模式。此外,如何在C++ CO-I中设置相同的位模式可以将客户端与服务器端的模式进行比较。_Java_C++_Linux_Networking - Fatal编程技术网

如何在Java中为幻数设置4字节位模式? 我正在使用C++在Linux机器上进行网络编程,我想知道如何在java(客户端)中设置神奇数字的4字节位模式。此外,如何在C++ CO-I中设置相同的位模式可以将客户端与服务器端的模式进行比较。

如何在Java中为幻数设置4字节位模式? 我正在使用C++在Linux机器上进行网络编程,我想知道如何在java(客户端)中设置神奇数字的4字节位模式。此外,如何在C++ CO-I中设置相同的位模式可以将客户端与服务器端的模式进行比较。,java,c++,linux,networking,Java,C++,Linux,Networking,提前感谢 编辑 现在我有了这个 byte[] signature = new byte[4]; for(int i=0; i<4; i++){ signature[i] = (byte) 0xA9; } 我在C中做了类似的事情++ uint8_t m_magicNumberBuffer[4]; magicKeyRead = read(m_fd, m_magicNumberBuffer, SIZE_OF_HEADER);

提前感谢

编辑

现在我有了这个

    byte[] signature = new byte[4];

    for(int i=0; i<4; i++){
        signature[i] = (byte) 0xA9;
    }
我在C中做了类似的事情++

    uint8_t m_magicNumberBuffer[4];
    magicKeyRead = read(m_fd, m_magicNumberBuffer, SIZE_OF_HEADER);


    if(m_magicNumberBuffer[0] == 0xA9 && m_magicNumberBuffer[1] == 0xA9 && m_magicNumberBuffer[2] == 0xA9 && m_magicNumberBuffer[3] == 0xA9){
        printf("SocketClient::recvMagicKey, Magic key has been found \n");
        break;
    }
我以某种方式工作,但不确定我是否声明了m_magicNumberBuffer和无符号整数,但它们在java中为负89。这样做可以吗


提前感谢。

Java有位运算符,例如位或
,位和
&
和位移位运算符
>
Java有位运算符,例如位或
,位和
&
和位移位运算符
>
在Java中,您可以将其表示为

byte[] signature=new byte[4];
在C++中,它将是

uint8_t signature[4];
然后,您可以作为数组的元素单独访问每个字节

这两种语言都支持十六进制代码,例如,您可以

signature[0]=0xA9;

在java或C++中,它将第一位设置成十六进制的A9(二进制是10101001)< /p>

爪哇,你可以把它表示为< /P>

byte[] signature=new byte[4];
在C++中,它将是

uint8_t signature[4];
然后,您可以作为数组的元素单独访问每个字节

这两种语言都支持十六进制代码,例如,您可以

signature[0]=0xA9;

在java或C++中,它将第一位设置成十六进制的A9(二进制为10101001)

当你写入DATaOutPutsFipe时,你写8位字节(符号不重要)< /P>
Java默认情况下假定一个字节是有符号的,但是它只是8位的数据,正确使用它可以是无符号的,也可以是任何您想要的意思。

当您写入DataOutputStream时,您会写入8位字节(符号不重要)


Java默认假设一个字节是有符号的,但是它只有8位的数据,正确使用它可以是无符号的,也可以是任何你想要的意思。

你真正要处理的是四个字节的原始内存;你所做的一切 与之相关的是位模式,而不是数值。八点 位(Java中
字节的大小)、
-89
0xA9
都具有相同的大小 位模式:
10101001
。因为
byte
是用Java签名的,所以转储 值将显示负值,这与直觉相反,但 Java没有8位无符号类型

(从技术上讲,
0xA9
不能用
字节表示,并试图将
它在<<代码> C++中的符号char <代码>是非法的,但是java不关心。

这些细节。)

你真正要处理的是四个字节的原始内存;你所做的一切 与之相关的是位模式,而不是数值。八点 位(Java中
字节的大小)、
-89
0xA9
都具有相同的大小 位模式:
10101001
。因为
byte
是用Java签名的,所以转储 值将显示负值,这与直觉相反,但 Java没有8位无符号类型

(从技术上讲,
0xA9
不能用
字节表示,并试图将
它在<<代码> C++中的符号char <代码>是非法的,但是java不关心。
这样的细节。)