C单片机 变量值怎么转换成字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C单片机 变量值怎么转换成字符串?相关的知识,希望对你有一定的参考价值。

已知uchar num=15;
液晶输出字符串
void Display_ASCII8X16(uint x0,uint y0,uchar *s,Color)

怎么把num/10和num%10 的结果转换成uchar *s格式以便液晶输出呢?

参考技术A uchar tmp[3];
tmp[0] = num%10 + 0x30; //看起来lz事项用ascii码,所以我加了个0x30,如果不用请去掉

tmp[1] = num/10 + 0x30;
tmp[2] = 0;

Display_ASCII8X16(uint x0,uint y0, tmp, Color);本回答被提问者和网友采纳
参考技术B 有一种笨办法:
先让s指向您为显示分配的缓存
*s++ =num/10 +'0';
*s++=num%10 +'0';
*s =0;
参考技术C /*
因为ASCII码中,字符'0'~'9'编码是连续的,因此要将数字转为ASCII值只要知道0的ASCII值'0',其它数字只要在'0'上加上偏移量【即该数字数值】即可转为对应的ASCII值。
因为'0'的值为48,'1'的值为49,'2'的值为50,如此类推那么'5'的值就 为53,即'0'+5 。
一般都是这样转换 '1'=1+'0','5'=5+'0',因为'0'的值为48也可以直接加48得到对应的字符。
*/
/*
* 函数功能:将浮点型数据 shu 转化为字符串。
* 以直接截断的方式尽可能的保留指定长度的小数位数(保留 DOT 位小数位数)。
* 将最高位存到返回字符串(字符串数组)的索引0,将第二高位存到返回字符串(字符串数组)的索引1,将第三高位存到返回字符串(字符串数组)的索引2,...
* 如果数据的整数部分宽度超出字符串数组所能表示的宽度,则返回全为问号的字符串。

由于受到存放数字的字符串数组长度N的限制,所以该方法的处理方式如下:
(1)字符串数组首先优先保证存放数据的整数部分,如果整数部分也存不下,
则数组全部存放问号,以表示数据溢出。解决这种溢出的办法是:增大用于控制数组长度的 N 值。

(2)在存放完数据的整数部分后,剩余的字符串数组长度如果还能够存放指定长度的小数位数,就存放指定长度的小数位数,
如果存放不了指定长度的小数位数,那么就尽可能多的存放小数位数,直到字符串数组存满为止。

(3)在C语言中,字符串的结束标志'\0'是需要占据字符串数组的一个位的,所以长度为 N 的字符串数组,
实际上真正能够用于存放有效数据的长度是 N-1,并且如果数据中如果有小数点,那么小数点也会占据一位。

*
* 参数 sign 等于 0 时:表示当小数位全部为0时,就不显示小数位。
* 参数 sign 大于 0 时:表示当小数位全部为0时,也必须显示小数位。
*
* 注意:使用该函数,必须进行如下宏定义:
* #define N 6 //用于保存数字字符串的数组的长度,该值可根据需要更改。
* #define DOT 2 //保留小数位数,该值可根据需要更改。
*
*/
unsigned char * shuToString(float shu, unsigned sign)

unsigned char shuStr[N];//存放数字的字符串数组
bit flag=0;//溢出标志位,0--没有溢出,1--有溢出
unsigned char i,j,c;
int zhengShu;

//处理整数部分

zhengShu=shu;//获取整数部分
shu=shu-zhengShu;//获取小数部分
i=0;
flag=0;
for(;;)

shuStr[i]=zhengShu%10+'0';
if(i>=N-1)//溢出处理

flag=1;
break;

zhengShu=zhengShu/10;
if(zhengShu==0)

break;

i++;

for(j=0;j<=i/2;j++)
if(flag)

shuStr[j]='?';
shuStr[i-j]=shuStr[j];

else

c=shuStr[j];
shuStr[j]=shuStr[i-j];
shuStr[i-j]=c;


//处理整数部分
//处理小数部分
if(flag || i==N-2)

shuStr[N-1]='\0';//字符串结束字符'\0'

else

if(i==N-3)

if(sign==0)

shuStr[N-2]='\0';//字符串结束字符'\0'

else

shuStr[N-2]='.';
shuStr[N-1]='\0';//字符串结束字符'\0'


else

i++;
shuStr[i]='.';
c=i;//记住小数点所在的索引
i++;
for(j=0;j<DOT;j++)

shu=shu*10;
shuStr[i]='0'+(int)shu;
shu=shu-(int)shu;//获取小数部分
i++;
if(i>=N-1)

break;


shuStr[i]='\0';//字符串结束字符'\0'
if(sign==0)

zhengShu=0;
for(j=c+1;j<i;j++)

if(shuStr[j]!='0')

zhengShu=1;
break;


if(zhengShu==0)

shuStr[c]='\0';//字符串结束字符'\0'




//处理小数部分
return shuStr;
参考技术D 直接按asic码转啊

c ++在一行中将变量值添加到字符串

【中文标题】c ++在一行中将变量值添加到字符串【英文标题】:c++ add variable value to string in one line 【发布时间】:2019-11-22 15:51:36 【问题描述】:

是否可以“轻松”将变量添加到 c++ 字符串?

我想要类似的行为

printf("integer %d", i);

但在字符串中,特别是在抛出这样的异常时:

int i = 0;
throw std::logic_error("value %i is incorrect");

应该和

一样
std::string ans = "value ";
ans.append(std::atoi(i));
ans.append(" is incorrect");
throw std::logic_error(ans);

【问题讨论】:

很遗憾,C++ 不能这样工作。 字符串插值就是它通常所说的。 C++20 将获得一个格式库,其工作方式与std::printf 类似,但适用于字符串。 @Hubert 它不兼容 C++20,因为 C++20 标准还没有最终确定。该支持是针对当前 C++20 草案的实验性支持。这就是为什么命令行选项显示-std=c++2a,而不是-std=c++20 。根据this,GCC 的 libstdc++ 还不支持 c++2a 文本格式。 @Hubert 如您所见here,尚无任何标准库支持 C++20 的文本格式添加。 (在页面上搜索“文本格式”) 【参考方案1】:

有多种选择。

一种是使用std::to_string:

#include <string>
#include <stdexcept>

auto test(int i)

    using namespace std::string_literals;

    throw std::logic_error"value "s + std::to_string(i) + " is incorrect"s;

如果您想更好地控制格式,可以使用std::stringstream:

#include <sstream>
#include <stdexcept>

auto test(int i)

    std::stringstream msg;
    msg << "value " << i << " is incorrect";

    throw std::logic_errormsg.str();

正在开发一个新的标准格式库。 Afaik 它在 C++20 的轨道上。它会是这样的:

#include <format>
#include <stdexcept>

auto test(int i)

    throw std::logic_error(std::format("value  is incorrect", i);

【讨论】:

没有std::string_literals也可以编译 @SlavasupportsMonica 我明白你的意思,但我喜欢直言不讳,特别是因为char[] 是一种讨厌的类型,你可以做一些不需要的事情,比如"asdf" + 24【参考方案2】:

你可以看看标准库提供的stringstream STL 类。对于您的示例,它将是这样的:

#include <sstream>      // std::stringstream

std::stringstream ss;

ss << i << " is incorrect";
throw std::logic_error(ss.str());

【讨论】:

我不会把这称为一行 公平点哈哈,但它可能比字符串连接更通用:)

以上是关于C单片机 变量值怎么转换成字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中增加String变量值?

编写一个循环来选择变量值的所有组合,在 R 中生成正方程值

Makefile编译时怎么打印出变量值

c ++在一行中将变量值添加到字符串

怎么在debug时显示全部的变量值

Python 中如何打印变量值