자바 의 byte 형식

11364 단어 Java
머리말
작은 프로젝트 에서 자바 와 QT 를 사용 하여 TCP 를 통신 합 니 다.자바 에 서 는 보 낼 바이트 데 이 터 를OutputStream변수 에 기록 한 다음write보 낼 수 있 지만OutputStream.write형식 데이터 만 받 아들 이 고byte데 이 터 를 보 내 면 4 개int로 나 누 어야 합 니 다.자바 의byte데이터 범 위 는byte이 고 이 위 를 통 해 분 리 된 바이트 변수 값 이 127 보다 크 면-128~127실제 적 으로 기 록 된 바이트 가 마이너스 입 니 다.수신 단 이 누적 법 으로 검 사 를 하고write유형 을 사용 하면 검사 에 실패 할 수 있 습 니 다.해결 방법 은 수신 단 누적 검사 시의 바이트 를 똑 같이u8형식 으로 바 꾸 면 됩 니 다.
코드
  • Java:server
  • private void SendClientData(byte nType, int[] Arr, byte nSize) {
            if (client != null) {
                int nLength = 4*(nSize+1)+3;
                byte[] byData = new byte[nLength];
    
                byData[0] = (byte)0xAA;
                byData[1] = (byte)(4*(nSize+1)+1);
                byData[2] = nType;
    
                for(int i=0;i<nSize;i++)
                {
                    byData[i*4 +3] = (byte)(Arr[i]>>24);
                    byData[i*4 +4] = (byte)(Arr[i]>>16);
                    byData[i*4 +5] = (byte)(Arr[i]>>8);
                    byData[i*4 +6] = (byte)Arr[i];
                }
                int nSum = 0;
                for (int j = 3; j < nLength-4; j++) {
                    nSum += byData[j];
                }
                byData[nLength - 4] = (byte) (nSum >> 24);
                byData[nLength - 3] = (byte) (nSum >> 16);
                byData[nLength - 2] = (byte) (nSum >> 8);
                byData[nLength - 1] = (byte) nSum;
    
                try {
                    out.write(byData);
                } catch (IOException Ioe) {
                    Ioe.printStackTrace();
                }
            }
    }
    
  • Qt:client
  • void Server::readMessage()
    {
        QByteArray buf;
        buf = m_pisocket->readAll();
        int i = 0;
        uint8_t nLen = 0;
        uint8_t nType = 0;
        uint8_t nState = 0;
        uint8_t sCnt = 0;
        uint8_t *pSbuf = NULL;
        while (i
  • 사용 한 협의
  • 프레임 헤드
    데이터 길이(1byte)
    명령 형식(1byte)
    데이터 세그먼트(n*4 byte)
    누적 검사(4 byte)
    0xAA
    4*(n+1)+1
    데이터 세그먼트 누적 합 만 계산 합 니 다.
  • 자바 는 항상char를 문자 로 처리 합 니 다.byte와 바 이 너 리 를 통 해 부적 합 치
  • 를 얻 을 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기