부울 값과 그 반대의 바이트 생성
문제:
8개가 있습니다. 부울 변수 및 이를 단일 바이트로 병합하려는 경우. 반대로, 바이트를 8개의 서로 다른 부울 값으로 디코딩하는 것이 목표입니다.
해결책:
어려운 방법:
unsigned char ToByte(bool b[8]) { unsigned char c = 0; for (int i = 0; i < 8; ++i) if (b[i]) c |= 1 << i; return c; } void FromByte(unsigned char c, bool b[8]) { for (int i = 0; i < 8; ++i) b[i] = (c & (1 << i)) != 0; }
멋지네요 방법:
struct Bits { unsigned b0 : 1, b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1; }; union CBits { Bits bits; unsigned char byte; };
한 조합원에게 배정하고 다른 조합원의 내용을 읽어보세요. 비트의 비트 순서는 구현에 따라 정의됩니다.
주의:
이러한 방식으로 공용체를 사용하는 것은 ISO C99에서 잘 정의되어 있으며 일부 C에서 지원됩니다. 컴파일러이지만 ISO C에서는 정의되지 않은 동작입니다. C 20에서 이식 가능한 유형 분석을 위해 memcpy 또는 std::bit_cast를 사용하세요.
위 내용은 1바이트와 8개의 부울 값 사이를 효율적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!