변수 x, x- (0 ... F)가있는 16 진수 ASCII 형식 [3x3x3x3x]의 문자열이 있습니다. 예를 들어 나는문자열에서 새로운 문자열로 특정 16 진수 값 추출
데이터
inData = 0x30303f3f
outData = 0x00ff
또는
inData = 0x3f3f3f3f
outData = 0xffff
여기서 비트 연산을 수행하는 가장 좋은 방법은 무엇입니까? 실제로 "3s"를 건너 뛰고 싶습니다.
// receive answer from device
if (ReceiveMsg(FLog, TLog::INFO, FSerial, &ReceiveStr))
{
int side;
char inData[4];
char serial[6];
char status;
if (sscanf(ReceiveStr.GetData(), "\x2%6s\x84%1d%4c%c", &serial, &side, &inData, &status) == 4) {
*Status = status & 0x0f;
// decode hex ASCII
int time = 0;
int j = 0;
for (int i = 3; i >= 0; i--) {
time = time + ((inData[i] & 0x0f) *(pow(16, j)));
j++;
}
*Timer = time;
result = true;
}
}
- inData의 [4] = 0x30에,는 0x30, 0x3F입니다, 0x3F입니다
- 시간 무엇을위한 루프를 수행 할 수있는 방법이 있다면 = 255 (출력) 궁금
비트 쉬프트 또는 이와 유사하게 더 빠르게 수행 할 수 있습니까?
시도한 것을 보여주십시오. –
출력은 여전히 문자열입니까, 아니면 구문 분석할까요? '_pext_u32' 또는'_mm_shuffle_epi8' 같은 것을 허용합니까? – harold
그건 말이 안됩니다. '0x30303f3f'는'0x00ff'이 아니며'0x3f3f3f3f'는'0xffff'가 아닙니다 –