int sprintf(char *string, char *format [,argument,...]);
51内核单片机+KEIL51编译器
在使用AT命令初始化模块时,使用sprintf进行指令数据值整合
若将数据直接使用%d转化成整形输入,数据到buf中出现错误
unsigned char xdata buf_a[10] = {0}}, buf_b[10] = {0};
sprintf(buf_a, "val_a=%d\r\n", 1); // 输出错误
sprintf(buf_b, "val_b=%d\r\n", 4);
尝试将数据值加大测试
sprintf(buf_a, "val_a=%d\r\n", 255); // 一个字节,输出错误
sprintf(buf_b, "val_b=%d\r\n", 256); // 两个字节,出错正确
输入常数255的时候,占一个字节,他就给你分配一个字节,输入256的时候占2个字节
他就给你分配两个字节,两个字节的数据,则可以输出正确
验证数据类型不同,输出内容
unsigned char xdata val_a = 123;
unsigned int xdata val_b = 123;
sprintf(buf_a, "val_a=%d\r\n", val_a); // char型,一个字节,输出错误
sprintf(buf_b, "val_b=%d\r\n", val_b); // int 型,两个字节,输出正确
查阅资料,keil51 内存没有对齐,在使用1个字节sprintf时出现数据错乱,
解决方法,在输出%d时,将数据类型定义成两个字节以上(short / int)。