자바 의 byte 형식
11364 단어 Java
작은 프로젝트 에서 자바 와 QT 를 사용 하여 TCP 를 통신 합 니 다.자바 에 서 는 보 낼 바이트 데 이 터 를
OutputStream
변수 에 기록 한 다음write
보 낼 수 있 지만OutputStream.write
형식 데이터 만 받 아들 이 고byte
데 이 터 를 보 내 면 4 개int
로 나 누 어야 합 니 다.자바 의byte
데이터 범 위 는byte
이 고 이 위 를 통 해 분 리 된 바이트 변수 값 이 127 보다 크 면-128~127
실제 적 으로 기 록 된 바이트 가 마이너스 입 니 다.수신 단 이 누적 법 으로 검 사 를 하고write
유형 을 사용 하면 검사 에 실패 할 수 있 습 니 다.해결 방법 은 수신 단 누적 검사 시의 바이트 를 똑 같이u8
형식 으로 바 꾸 면 됩 니 다.코드
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();
}
}
}
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
와 바 이 너 리 를 통 해 부적 합 치이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.