[C++] Ciekawostka - polskie znaki a wsprintf

0

Muszę sobie pokonwertować tekst tak, że normalne znaki alfanumeryczne zostaną nieruszone, natomiast znaki specjalne zostaną zamienione na swoją wartość hexadecymalną.
Używam do tego wpierw ifa rozróżniającego czy znak jest alfanumeryczny (funkcja isalnum), jeśli jest to po prostu przepisuję. Jeśli nie jest - wsprintf(dst, "%X", source[i]);

I teraz zabawna sprawa - skompilowane w trybie Debug wszystko działa pięknie i cacy.
W trybie Release - literka 'Ł' zamiast na 'A3' jest zamieniana na 'FFFFFFA3'...

wtf, że tak zapytam...? oO

0

char x = 0xA3
unsigned long z = x;

z == 0xFFFFFFA3, poniewaz X bylo ujemne (0xA3 > 127)
mozliwe, ze przy przejsciu na release, gdzies jakis debug-kod/asercje zostal usuniety, i jakies rzutowanie na unsigned zostalo pominiete, przez co pozniej dostajesz dopiero w release naprawde poprawny wynik.

%X za pewne spodziewa sie long'a!
imho, powinno byc cos na wzor: wsprintf(dst, "%X", (unsigned char)source[i]);

0

Wielkie dzięki, teraz jest ok! :)
Powinnam była na to wpaść...

1 użytkowników online, w tym zalogowanych: 0, gości: 1