2013-04-21 16 views
10

Pracuję z Arduino.Jak wysłać ctrl + z w C

Chcę wysłać Ctrl + Z po sznurku w C I próbował obcinania ^Z ale to nie działa. Jak to zrobić?

+1

char ctrlz = 0x1a; – yeyo

+1

http://en.wikipedia.org/wiki/ASCII#ASCII_control_code_chart w celu uzyskania dalszych informacji. – TNW

+0

* nix, 'man ascii' – yeyo

Odpowiedz

12

Ctrl + Z = 26 = '\032' = '\x1A'. Każda z sekwencji ułamkowych odwrotnych ukośników może być napisana literowo (ale ostrożnie z ucieczką heksadecymalną, tak jakby następowała cyfra lub AF lub af, która również będzie liczona jako część ucieczki heksadecymalnej, co nie jest chcesz).

Jednakże, jeśli symulujesz wejście terminala na komputerze z systemem Windows (aby znak był traktowany jako wskazanie EOF), musisz pomyśleć jeszcze raz. Tak nie działa.

Może, ale nie musi, robić to, co chcesz z Arduino; po części zależy to od tego, co myślisz, że to zrobi. Zależy to również od tego, czy ciąg wejściowy będzie traktowany tak, jakby pochodził z terminala.

1

Zakładam, że przez "obcinanie" faktycznie oznacza to dołączanie.

w ASCII, CTRL + oo jest punkt kod 26, więc można po prostu dołączyć, że jako postać, coś jak:

#define CTRL_Z 26 
char buffer[100]; 
sprintf (buffer, "This is my message%c", CTRL_Z); 

Sposób sprintf jest tylko jeden ze sposobów Robiąc to, ale wszystkie w zasadzie zależą od tego, czy wstawisz pojedynczy bajt na końcu o wartości 26.

+1

takich jak po prostu użycie sekwencji escape \ xFF, gdzie FF są dwiema cyframi szesnastkowymi, które są dla kodu. więc: "To jest moja wiadomość \ x1A" – matt

3

I hacked to jako ja potrzebowałem podobny

#include <stdio.h> 
#define CTRL(x) (#x[0]-'a'+1) 
int main (void) 
{ 
    printf("hello"); 
    printf("%c", CTRL(n)); 
    printf("%c", CTRL(z)); 
} 

nadzieję, że pomoże 8)

Powiązane problemy