uint8_t와 부호 없는 문자
를 사용하는 이점은 무엇입니까?uint8_t
에 걸쳐서unsigned char
C?C?로 표시합니까?
의 모든 있다.uint8_t
는 그냥 for for for is is is for for for for is is 、 is is 、 is is is 。unsigned char
럼럼왜 ?용 ???
이것은 당신의 의도를 문서화합니다 - 당신은 문자가 아닌 작은 숫자를 저장합니다.
다른 더 요.uint16_t
★★★★★★★★★★★★★★★★★」int32_t
.
요점은 구현에 의존하지 않는 코드를 작성하는 것입니다. unsigned char
여덟 살 uint8_t
이랬다
현학적 관점에서 말씀드리면 시스템에 따라서는 8비트 타입이 없는 경우가 있습니다.위키피디아에 따르면:
구현은 요건을 충족하는 유형이 있는 경우에만 N = 8, 16, 32 또는 64에 대한 정확한 폭 정수 유형을 정의해야 합니다.적절한 유형을 지원하는 경우에도 다른 N에 대해 정의할 필요는 없습니다.
★★★★★★★★★★★★★★★★★.uint8_t
8비트 = 1바이트인 모든 플랫폼에 대해 존재한다고 보장되는 것은 아닙니다.일부 임베디드 플랫폼은 다를 수 있지만, 이는 매우 드물어지고 있습니다., 「」를 할 수 있습니다.char
열여섯 살이 경우 8비트 타입은 존재하지 않을 수 있습니다.
그 이외에는 마크 랜섬의 답변이 가장 좋다고 생각합니다.데이터의 용도를 가장 명확하게 나타내는 것을 사용합니다.
아마 은 리고, also also, 은 also를 의미했을 uint8_t
(C99 표ef typedef)에 되어 있습니다).stdint.h
header)가 아닌 header)를 합니다.uint_8
(표준의 일부가 아님).
말씀하신 대로, "거의 모든 시스템"입니다.
char
것 중 만, 일단 을 하면,uint16_t
, 친구, 친구, 친구, 친구, 친구, 친구.uint8_t
더 잘 혼합되며 코드 표준의 일부일 수도 있습니다.
예를 들어 네트워크아나라이저를 쓸 때 매우 중요합니다.패킷 헤더는 특정 플랫폼의 C 컴파일러가 동작하는 방식이 아니라 프로토콜 사양으로 정의됩니다.
제 경험상 uint8_t를 8비트(및 uint16_t 등)로 사용하고 싶은 장소와 8비트 미만의 필드를 가질 수 있는 장소가 있습니다.두 장소 모두 공간이 중요하기 때문에 디버깅할 때 데이터의 원시 덤프를 확인해야 하며 데이터가 무엇을 나타내는지 신속하게 파악할 수 있어야 합니다.
첫 번째는 RF 프로토콜, 특히 협대역 시스템에서 발생합니다.이 환경에서는, 1개의 메세지에 가능한 한 많은 정보를 정리할 필요가 있습니다.두 번째는 플래시 스토리지입니다. 플래시 스토리지에서는 공간이 매우 제한적일 수 있습니다(예: 임베디드 시스템).어느 경우든 컴파일러가 패킹과 언팩을 처리하는 패킹된 데이터 구조를 사용할 수 있습니다.
#pragma pack(1)
typedef struct {
uint8_t flag1:1;
uint8_t flag2:1;
padding1 reserved:6; /* not necessary but makes this struct more readable */
uint32_t sequence_no;
uint8_t data[8];
uint32_t crc32;
} s_mypacket __attribute__((packed));
#pragma pack()
사용하는 방법은 컴파일러에 따라 다릅니다.또한 동일한 헤더 파일을 사용하여 여러 개의 다른 컴파일러를 지원해야 할 수도 있습니다.이 문제는 디바이스와 서버가 완전히 다른 임베디드 시스템에서 발생합니다.예를 들어 x86 Linux 서버와 통신하는 ARM 디바이스가 있을 수 있습니다.
패킹된 구조물을 사용할 때는 몇 가지 주의사항이 있습니다.가장 큰 문제는 회원의 주소 참조를 피해야 한다는 것입니다.멀티바이트 정렬된 단어가 있는 시스템에서는 이 경우 잘못 정렬된 예외와 코어 덤프가 발생할 수 있습니다.
또, 퍼포먼스에 대해 염려하는 사람도 있습니다.이러한 구조를 사용하면 시스템이 느려진다고 하는 사람도 있습니다.컴파일러는 백그라운드에서 정렬되지 않은 데이터 멤버에 액세스하기 위한 코드를 추가하는 것은 사실입니다.IDE의 어셈블리 코드를 보면 알 수 있습니다.
그러나 패킹된 구조는 통신 및 데이터 저장에 가장 유용하기 때문에 메모리에서 패킹되지 않은 표현으로 데이터를 추출할 수 있습니다.일반적으로 데이터 패킷 전체를 메모리에 저장할 필요는 없습니다.
다음은 관련된 몇 가지 설명입니다.
pragma pack (1)도 __parg__((aligned (1))도 동작합니다.
gcc의 __attribute__(packed) / #pragma pack은 안전하지 않습니까?
http://solidsmoke.blogspot.ca/2010/07/woes-of-structure-packing-pragma-pack.html
거의 없어요.휴대성의 관점에서 보면,char
8비트보다 작을 수 없습니다.또, 이하도 없습니다.char
따라서 특정 C 구현에 부호 없는8비트 정수 타입이 있는 경우에는char
또는, 전혀 존재하지 않을 수도 있습니다.typedef
속임수는 무익하다.
8비트 바이트가 필요한 것은 분명하지만 다른 것은 없다는 점에서 코드를 더 잘 문서화하는 데 사용할 수 있습니다.그러나 실제로는 거의 어디에서나 충분히 기대할 수 있습니다(DSP 플랫폼에서는 사실이 아니지만 코드가 실행될 가능성은 희박합니다.또, 이러한 플랫폼에서는 프로그램의 상단에서 정적 어사트를 사용하면, 에러에 빠질 수도 있습니다).
거의 모든 시스템에서 uint8_t == unsigned char(부호 없는 문자)를 만나봤지만 C 표준에서는 보장되지 않습니다.휴대용 코드를 쓰려고 할 때 메모리 크기가 정확히 중요한 경우 uint8_t를 사용합니다.그렇지 않으면 부호 없는 문자를 사용합니다.
언급URL : https://stackoverflow.com/questions/1725855/uint8-t-vs-unsigned-char
'itsource' 카테고리의 다른 글
vue-cli 웹 팩 프로젝트의 웹 팩 구성 파일 위치 (0) | 2022.09.03 |
---|---|
Vue.js를 사용하여 선택한 모든 확인란 목록을 가져옵니다. (0) | 2022.09.03 |
Java에서 유효한 URL을 확인하려면 어떻게 해야 합니까? (0) | 2022.09.03 |
JAX-RS 프로바이더의 의미 (0) | 2022.09.03 |
JSP를 사용하여 URL에서 파라미터를 취득하는 방법 (0) | 2022.09.03 |