>  기사  >  백엔드 개발  >  C/C++의 엔디안과 유형 변환에 대한 심층적인 이해

C/C++의 엔디안과 유형 변환에 대한 심층적인 이해

高洛峰
高洛峰원래의
2016-11-17 13:12:362115검색

바이트 순서와 유형 변환을 따로 이야기하면 누구나 아주 간단하다고 생각할 수 있지만 깊이 이해하지는 못합니다. 그것들을 결합해서 토론한다면 아마도 그것들을 완전히 이해할 수 있을 것입니다.

바이트 순서 및 유형 변환의 기본을 이해하지 못하는 경우 다음 블로그를 참고하세요:

https://my.oschina.net/u/1783725/blog /647973 크고 작은 엔디안

https://my.oschina.net/u/1783725/blog/700970 유형 변환

주제에 들어가기 전에 한 말씀 드리겠습니다:

서로 다른 시스템 숫자는 서로 다른 데이터 유형의 바이트 크기에 해당합니다.

C/C++의 엔디안과 유형 변환에 대한 심층적인 이해

둘 사이의 연결 세부 사항

엔디안: 작동 메모리, 즉 우리가 보는 데이터를 메모리에 저장하는 규칙.

빅 엔디안: 빅 엔디안이 유효하며, 상위 데이터가 낮은 주소 메모리에 먼저 저장되고, 하위 데이터가 상위 주소 메모리에 저장됩니다. 리틀 엔디안: 리틀 엔디안이 유효합니다. -order 데이터가 낮은 주소 메모리에 먼저 들어가고, 높은 비트 데이터가 높은 주소 메모리에 들어갑니다

메모리(예: memcpy)를 작동할 때 바이트 순서를 고려해야 합니다. 🎜>

C/C++의 엔디안과 유형 변환에 대한 심층적인 이해

유형 변환: 읽는 작업입니다. 데이터는 메모리에서 읽어온 데이터이며 유형 바이트의 크기에 따라 변환됩니다.

자릿수가 많은 것은 작은 자릿수로 변환되고(상위 데이터는 잘려 위치 데이터가 남음), 자릿수가 작은 것은 자릿수가 많은 것(상위 데이터는 생략)으로 변환됩니다. 주문 데이터는 0으로 채워집니다).

C/C++의 엔디안과 유형 변환에 대한 심층적인 이해

이해하기 위한 예

1. 할당은 바이트 순서와 관련이 없습니다. 메모리(memcpy)를 작동할 때 바이트 순서를 고려해야 합니다.

1: unsigned long long 타입의 0xABCDEF1234를 unsigned long 타입의 변수에 바이트 순서에 관계없이 할당

2: unsigned long long 타입의 0xABCDEF1234 변수의 memcpy를 short 타입의 변수에 사용 바이트 순서와 관련된 0을 찾습니다.

코드는 다음과 같습니다.

#include <stdio.h>int main(int argc, char *argv[])
{
	unsigned long long ullVar = 0xABCD1234;	
	unsigned long ulVar1 = 0;	
	unsigned long ulVar2 = 0;	
	/*memcpy操作内存时,需要考虑系统的大小字节序,如果是大字节序的话,高位的数据保存在低地址上*/
	memcpy(&ulVar1,&ullVar,sizeof(ulVar1));	/*赋值时,就是讲读出的数据按照要赋值的数据类型的大小进行转换*/
	ulVar2 = ullVar;	printf("ulVar1=%x      ulVar2=%x \n",ulVar1,ulVar2); 
	//输出:ulVar1=0      ulVar2=abcd1234
	return 0;
}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.