В настоящее время я изучаю замечательный Arduino и некоторые C, и я пытаюсь заставить это работать. Как сделать следующее в C!
String val = "";
while(true) {
thisChar = "2"; // this will be a "char" in C, this is finished in C, it reading from a stream, the "2" is just an example
if(val.length < 3) {
val = val + thisChar;
} else {
int num = val;
// i will do something with my new int thing
val = "";
}
}
Поэтому я пытаюсь в основном получить char, сгруппировав три из них в строку, скрыв ее в int, а затем что-то с ней делать. числа, отправленные в тройках, составляют от 000 до 100!
Я опубликую то, что я придумал.
char val[];
if (client.available() > 0) { //finns åtmminstone 1 klient?
char thisChar = client.read(); //läser av nästa byte från servern
if( thisChar == 'H' ){
Serial.println("HIGH from client");
digitalWrite(led, HIGH); // lys LED
}
else if( thisChar == 'L' ){
Serial.println("LOW from client");
digitalWrite(led, LOW); // släck LED
}
else {
Serial.println(thisChar);
int len = strlen(val);
if(len < 3) { // saknas fortfarande tecken tex 0 eller 02
val = val +
}
else { // värdet är komplett tex 010 eller 100
val = "";
}
}
}
ОТВЕТ: Благодаря @morgano для чата он смог собрать следующий код из всех трех ответов!
static char val[4] = {0}; //we only care about 3 digit numbers.
static int len = 0;
//... code blabla
char thisChar = client.read(); //läser av nästa byte från servern
//... code blabla
else {
val[len] = thisChar;
len++;
if(len > 2) { // värdet är komplett tex 010 eller 100
int i;
sscanf(val, "%d", &i);
Serial.println(i);
//Serial.println(val);
len = 0;
//val[3] = 0;
}
}
Преобразование Java-кода непосредственно в C дает мне это. Измените размер массива на то, каким может быть ваш максимальный размер строки.
char *val;
char inputchar[10];
int num;
val= malloc(sizeof(char) *20);
while(1){
inputchar=readclient();
if(strlen(val) < 3)
val = strcat(val, inputchar);
else {
num= atoi(val);
memcpy(val, '\0', 10 );
}
}
free(val);
Вам нужно проверить функции atoi и memcpy один раз.
Добавление еще одного решения, которое не подразумевает использование функций char [] или "string":
int val = 0;
int len = 0;
while(1) {
char thisChar = clientread();
if(len < 3) {
val = val * 10 + (thisChar - 0x30);
len++;
} else {
do_something_with_val(val);
val = 0;
len = 0;
}
}
char[10]
просто используйте char
, этот код не работает с массивами символов. Я подозреваю, что вам понадобится гораздо больше помощи ... мы можем открыть чат?
То, что у вас хорошо выглядит - вам просто нужно решить, как "добавить" текст в свой массив char
.
Я бы сохранил переменную, описывающую текущую "длину" строки. Итак, вы можете попробовать что-то вроде:
char val[4]; //we only care about 3 digit numbers.
int valLength = 0; //No characters in the string yet.
char thisChar = client.read();
val[3] = '\0'; /* Need to terminate the string, or else... */
if (valLength < 3) {
val[valLength] = thisChar;
valLength++;
}
else {
int myIntVal = strtol(val, 0, 10); //I believe this is the right syntax. I'm not 100% sure.
val[0] = 0;
val[1] = 0;
val[2] = 0;
}