2011-11-22 10 views
11

mam sekwencje znaków Jestem karmienia z funkcją dekodowania:Jak uciec lub zakończyć sekwencję ucieczki w C

Na przykład:

"\x05three" 

(Tak, to jest ciąg Pascal-style . funkcja tłumaczy ciągi długości-prefiksem do strun NUL)

pisałem kilka testów, wśród których:.

"\x04four" 

I ku mojemu zaskoczeniu, wyszło jak "Oour". Przyjrzyjmy się bliżej, okazuje się, że specyfikacja na escape sequences dla Visual Studio pozwala, że ​​moja sekwencja jest zasadniczo interpretowana jako \x04f, która byłaby 79 w podstawie 10 (w ten sposób wynikowy ciąg staje się "Oour", 79 to "O")

Moje rozwiązanie było po prostu podzielić ciąg:

"\x04" "four" 

pytanie: czy istnieje inny sposób na ucieczkę lub zakończyć sekwencję ucieczki?

+1

'0x04f' to 4 * 16 + 15 = 79, więc" O ". –

+1

0x4f (hex) ma wartość 79 w systemie dziesiętnym, co oznacza literę "O". 80 w systemie dziesiętnym (nie 0x80, który jest liczbą szesnastkową) to litera P. 0x80 ma 128 znaków dziesiętnych, co nie jest standardowym znakiem ASCII –

+0

Dziękuję wam obojgu. Wstydzę się teraz. Zastanawiam się, czy dziś rano złapałem bezkofeinową puszkę ... – MPelletier

Odpowiedz

5

Tak, na przykład nie można wypróbować "\004four". Rzeczywiście, prawdopodobnie zrobi to nawet "\04four", ponieważ f nie jest liczbą ósemkową.

+1

prawdopodobnie oznaczało \ 004four ... –

+0

Tak, dzięki, zmieniłem to już ;-) –

+0

@AndersK. Prawdopodobnie. I wielki DUUHHH! dla mnie! – MPelletier