J'ai une chaîne au format Hex ASCII [3x3x3x3x] avec la variable x, x- (0 ... F).Extraction de certaines valeurs hexadécimales d'une chaîne vers une nouvelle chaîne
Par exemple, je peux obtenir des données
inData = 0x30303f3f
et que vous voulez convertir en:
outData = 0x00ff
ou
inData = 0x3f3f3f3f
outData = 0xffff
Comment est la meilleure façon de faire des opérations de bits ici, vraiment je veux juste passer les "3"?
// 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
- temps = 255 (sortie)
Je me demande s'il y a un moyen de faire ce que la boucle for fait-il plus vite, comme avec le décalage de bits ou similaire?
Montrez ce que vous avez essayé. –
La sortie est-elle toujours une chaîne ou voulez-vous l'analyser également? Et autorisez-vous des choses comme '_pext_u32' ou' _mm_shuffle_epi8'? – harold
Cela n'a aucun sens. '0x30303f3f' n'est pas' 0x00ff', et '0x3f3f3f3f' n'est pas' 0xffff' –