Wpis z mikrobloga

Cześć, mam pewien problem z którym nie mogę się uporać, a więc:
Mam char* który wskazuje na pewien adres w pamięci, który zawiera tekst, tekst powinien wyglądać tak:
"Mały" jednak za nic nie mogę zgadnąć co to za kodowanie, albo jak to odwrócić. Gdy rzutuje tego chara na inta otrzymuję liczbę -77, z pozoru wydaję się całkowicie przypadkowe, ale... gdy zamienimy -77 z dec na hex otrzymamy "FFFFFFFFFFFFFFB3" interesujące są dwie ostatnie cyfry, mianowicie B3, zgodnie z ISO-8859-2, B3 == 'ł', więc wszystko by się zgadzało, tylko jak teraz napisać funkcję konwertującą to wszystko? Wiem, że można to w sumie zrobić na piechotę, kopiując kod hex każdej litery i dodając do niego pełno piętnastek(F), jednak program ma być docelowo dostępny w kilku językach, więc nie ukrywam, że trochę musiałbym się pobawić z ctrl+c i ctrl+v, a pewnie istnieje jakiś łatwiejszy sposób :/

Korzystam też z #qt jeśli jest tam jakaś przydatna do tego funkcja (próbowałem wielu funkcji konwertujących z chara do Latin1, Utf8 i tak dalej)

#cpp #naukaprogramowania
  • 13
@morsisko: KrzaQ2 ma rację. Masz chara, który binarnie wygląda tak:
10110011.
Signed char powie, że to -77, unsigned powie, że to 179 (a w ISO8859-2 to właśnie 'ł').
Castowanie na signed int spowodowało, że -77 jest teraz zapisane na większej ilości bitów:
11111111 1111111 11111111 10110011, ale to nadal -77. Trzeba było albo wypisać jako %u w printfie.

Nie dopisuj żadnych "F"ów ani nic. Dobrze działa jak jest.
@telpeloth: No dobra, ale wiesz jak teraz zrobić żeby przekonwertować to na stringa/qstringa z normalnym wyświetlaniem polskich znaków? Pobierać tekst jako unsigned char zamiast char?
bo ui->label->setText((unsigned char)znak[3]) nadal wyświetla to samo co w charze czyli "?", a chyba po takim zabiegu powinno pokazać się "ł"?
Nie jestem specjalistą od Qt, więc nie pomogę dokładnie, ale powiem Ci, co się wyprawia wg mnie: masz tekst w kodowaniu ISO-8859-2 lub Windows-1250, patrząc po tym 'ł'. Qt myśli, że to tekst zakodowany w UTF-8, co znaczy, że znaki 0-127 są takie same niezależnie od kodowania. Dochodzi do bajtu z tym nieszczęsnym 'ł' i natrafia na problem, bo nie potrafi go odpowiednio wyświetlić. Poczytaj tutaj, jak działa UTF8: https://pl.wikipedia.org/wiki/UTF-8

To, co