2013-04-21 5 views
10

Я работаю с Arduino.Как отправить ctrl + z в C

Я хочу отправить Ctrl + г после строки в C. Я попытался усечения ^Z но это не сработало. Итак, как это сделать?

+1

голец ctrlz = 0x1A; – yeyo

+1

http://en.wikipedia.org/wiki/ASCII#ASCII_control_code_chart для дальнейшей справки. – TNW

+0

* nix, 'man ascii' – yeyo

ответ

12

Ctrl + Z = 26 = '\032' = '\x1A'. Любая из escape-последовательностей обратной косой черты может быть записана в строковый литерал (но будьте осторожны с шестнадцатеричным escape-кодом, как если бы за ним следовала цифра или AF или af, что также будет считаться частью перехода hex, что не является чем-то вы хотите).

Однако, если вы моделируете вход терминала на компьютере с Windows (чтобы вы хотели, чтобы символ обрабатывался как индикация EOF), вам нужно подумать еще раз. Это не так, как это работает.

Он может или не может делать то, что вы хотите, с Arduino; отчасти это зависит от того, что вы думаете, что это будет делать. Это также зависит от того, будет ли входная строка обрабатываться так, как если бы она поступала с терминала.

1

Я предполагаю, что «усечение» на самом деле означало добавление.

В ASCII, CTRL + г это код точки 26, так что вы можете просто добавить, что в качестве символа, что-то вроде:

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

Метод sprintf только один из способов делая это, но все они в основном зависят от того, что вы положили один байт в конце со значением 26.

+1

, например, просто используя escape-последовательность \ xFF, где FF - это две шестнадцатеричные цифры для кода. так: «Это мое сообщение \ x1A" – matt

3

я взломал это вверх, как мне нужно было похоже

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

надеюсь, что это помогает 8)

Смежные вопросы