부호가없는 32 비트 정수로 압축 된 짧은 문자열/문자 배열은 여러 가지 이유로 단순한 정수 비교와 한 번에 비교할 수 있고 여전히 인간의 비트를 유지하면서 switch
문에서 사용할 수 있기 때문에 매우 유용합니다. 가독성.짧은 문자열을 32 비트 정수로 변환하는 가장 효율적인 방법은 무엇입니까?
32 비트 정수로 이러한 짧은 문자열을 변환하는 가장 일반적인 방법은 이동하는 것입니다/또는 : 너무 긴
#include <stdint.h>
uint32_t quadchar(const char* _str)
{
uint32_t result = 0;
for(size_t i=0; i<4; i++)
{
if(_str[i] == 0)
return result;
result = (result << 8) | _str[i];
}
return result;
}
문자열이, 잘립니다.
지금까지는 그렇게 좋았지 만 런타임에는 약간의 시간이 소요되었습니다. 컴파일시에도이 작업을 수행 할 수 있습니까?
C++ 14 이상에서는 함수에'constexpr'을 추가하면됩니다. C++ 11에서 이것을 어떻게 (즉 재귀 적으로) 수행하는지 보여주는 해답이 이미 있습니다. C++ 03의 경우 좋은 구문을 얻는 것이 사실상 불가능하지만, C++ 03 솔루션은 일부 스크립팅을 통한 소스 코드 전처리입니다. –
union 메서드는 정의되지 않은 동작이며 결과는 CPU의 endianness에 따라 다릅니다. – Barmar
@Barmar : true, thx. 나는이 구절을 삭제했다. – user2328447