C + + / 자바 간 Socket 통신 크기 단 주의사항
컴퓨터 시스템 에서 우 리 는 바이트 단위 로 모든 주소 단원 은 하나의 바이트 에 대응 하고 하나의 바이트 는 8bit 이다.그러나 C 언어 에는 8bit 의 char 를 제외 하고 16bit 의 short 형, 32bit 의 log 형 (구체 적 인 컴 파일 러 를 봐 야 한다) 도 있다. 또한 8 비트 이상 의 프로세서, 예 를 들 어 16 비트 또는 32 비트 의 프로세서 에 대해 레지스터 너비 가 한 바이트 이상 이기 때문에 여러 바이트 를 어떻게 배치 하 는 지 에 문제 가 존재 할 것 이다.그래서 대형 저장 모드 와 작은 저장 모드 를 초래 했다.
현재 Intel 의 80x 86 시리즈 칩 은 유일 하 게 작은 엔 드 를 꾸준히 사용 하고 있 으 며, MIPS 와 ARM 등 칩 은 모든 엔 드 방식 으로 저장 하거나 큰 엔 드 를 지원 하 는 옵션 을 제공 합 니 다. 크기 에서 전환 할 수 있 습 니 다.또한 대소 단 에 대한 처리 도 컴 파 일 러 의 실현 과 관련 이 있다. C 언어 에서 기본 값 은 작은 단 (그러나 일부 단편 기 에 대한 실현 은 큰 단, 예 를 들 어 Keil 51C) 을 바탕 으로 하고 자 바 는 플랫폼 과 무관 하 며 기본 값 은 큰 단 이다.네트워크 에서 데 이 터 를 전송 하 는 데 보편적으로 사용 되 는 것 은 모두 대단 하 다.
대 단 과 소 단 간 의 통신 을 만나면대소 단의 데이터 읽 기 원리 에 따라 상응하는 변환 을 해 야 한다.(자바 의 엔 드 모드 를 예 로 들 면)
현재 자바 의 32 비트 int 형 데 이 터 를 예 로 들 어 변환 예제 를 만 듭 니 다.
다음 과 같 습 니 다. 큰 끝 int 를 작은 끝 으로 바 꾸 는 byte 배열 입 니 다. int 형의 4 개의 높 은 비트 16 진수 역 서 를 바이트 배열 에 넣 습 니 다.
public static byte[] intToMinByteArray(int i) {
byte[] result = new byte[4];
//
result[3] = (byte) ((i >> 24) & 0xFF);
result[2] = (byte) ((i >> 16) & 0xFF);
result[1] = (byte) ((i >> 8) & 0xFF);
result[0] = (byte) (i & 0xFF);
return result;
}
다음은 작은 엔 드 배열 이 큰 엔 드 int 수로 바 뀌 는 예제 입 니 다. 문자열 로 표 시 된 16 진수 로 Integer 의 api 로 바 꿉 니 다.
public static int byteLittleEndianToInt(byte[] bytes) {
String nubHexStr = "";
byte[] temp = new byte[bytes.length];
for (int i = 0; i < bytes.length; i++) {
System.out.println(" :" + bytes[bytes.length - i - 1]);
System.out.println(" 16 :"+Integer.toHexString(bytes[bytes.length - i - 1]));
nubHexStr += Integer.toHexString(bytes[bytes.length - i - 1]);
}
System.out.println("16 :" + nubHexStr);
return Integer.parseInt(nubHexStr, 16);
}
이상 코드 는 Felix 에서 왔 습 니 다.
다음으로 전송:https://www.cnblogs.com/LingoXu/p/5235176.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.