之前我问了类似的问题,但答案并不完全是我想要的,所以这次我会提供更多细节.
我是第一次使用C语言编写微控制器.我有一个Android APP,允许用户选择颜色组合(RGB颜色),然后将颜色代码发送到微控制器.微控制器根据所选内容显示灯光.
我试图做的是能够一次读取四位数字.因此,如果发送的号码是2005001000200,我想做以下事情.
提取第一个数字并将其保存在一个名为mode的变量中.然后..提取下四个数字并将它们保存在一个名为red的变量中.然后......提取下四个数字并将它们保存在一个名为green的变量中.然后..提取最后四位数字并将它们保存在一个名为blue的变量中.所以输出应该是这样的......
模式= 2
红色= 0050
绿色= 0100
蓝色= 0200
如果我能看到一个例子来说明我想要做的事情那就太棒了.请记住,我是第一次编程微控制器.非常感谢!
假设我2005001000200ULL在某个unsigned long long地方:
unsigned long long value = 2005001000200ULL;
Run Code Online (Sandbox Code Playgroud)
如果我想提取blue,我会使用模运算:
unsigned long long value = 2005001000200ULL;
unsigned int blue = value % 10000;
Run Code Online (Sandbox Code Playgroud)
要提取绿色,我会使用除法运算,然后进行相同的模运算:
unsigned long long value = 2005001000200ULL;
unsigned int blue = value % 10000; value /= 10000;
unsigned int green = value % 10000;
Run Code Online (Sandbox Code Playgroud)
要提取红色,请重复以下过程:
...
unsigned long long value = 2005001000200ULL;
unsigned int blue = value % 10000; value /= 10000;
unsigned int green = value % 10000; value /= 10000;
unsigned int red = value % 10000; value /= 10000;
unsigned int mode = value;
Run Code Online (Sandbox Code Playgroud)
嘿! 我错过了一步!:(
如果发送的号码格式是固定的,那么如果您正在从键盘上阅读,则可以使用以下逻辑:
scanf("%1d%4d%4d%4d",&mode,&red,&green,&blue);
Run Code Online (Sandbox Code Playgroud)
那就可以了.
如果它在文件中,请使用fscanf()它.我相信使用fscanf()是众所周知的.
虽然我们在它,如果该数字是一个字符串,那么你可以简单地使用sscanf()类似的格式说明符字符串.
完整的使用示例:
double input = 2005001000200;
char buffer[14];
sprintf(buffer, "%f", input);
int mode, red, green, blue;
sscanf(buffer, "%1d%4d%4d%4d",&mode,&red,&green,&blue);
Run Code Online (Sandbox Code Playgroud)