如何在-120到120之间更改int到char(或其他简单保存为一个字节的简单方法)

How to change int between -120 and 120 to char (or other simple way to save as one byte)

本文关键字:简单 保存 一个 方法 字节 其他 之间 int char -120      更新时间:2023-10-16

我正在阅读一个传感器,并每10分钟获得温度变化的值。目前,我正在节省温度的变化。

温度变化的范围应在-120到120之间,我想节省温度变化为EEPROM,但是我只有512个字节备用,并且作为整数,值占2个字节。因此,我认为我可以将值分配给相应的char值,并将其保存到EEPROM(因为这只会占用一个字节),例如(例如'4''s''$'等),但是我看不到这样做的简单方法。

我正在使用我相信并在这里询问的Arduino IDE,因为它确实是一个软件问题

我认为我应该能够使用

之类的东西
int tempAsInt = -50;
char tempAsChar;
tempAsChar = char(tempAsInt);

int tempAsInt = -50;
signed char tempAsChar;
tempAsChar = tempAsInt;

,但第一个打印了不同的tempasint值

的相同字符(Upsidedown问号或null值)

和第二个刚刚打印出与整数相同的值,即如果更改为-50,则打印为-50,所以我不确定它是否真的是char,尽管也许我只是在打印错了。

我的打印代码是

mySerial.print("tTempAsInt: "); 
mySerial.print(tempAsInt); 
mySerial.print("tTempDiffAsInt: "); 
mySerial.print(tempDiffAsInt); 
mySerial.print("tTempDiffAsChar: "); 
mySerial.print(tempDiffAsChar);

在C和C 中,有几种方法可以将对象铸成其他类型。有关摘要

没有完整的代码,很难确定。但是,您的问题似乎是通过使用COUT来检查以下变量的值引起的。

cout<<tempAsInt<<endl<<tempAsChar;

cout将 tempaschar 变量解释为字符类型,并按照编码打印值。

由于-50不在系统上的ASCII代码的可打印范围(请参阅http://www.asciatible.com/),因此您会看到一些值,这并不是 tempaschar ,但是一个填充物,例如一个无法打印的问号。

您可以通过将 tempaschar设置为50的值来确认上述行为,以查看字符'2'。

要验证 tempaschar 确实具有正确的值,请改用printf:

printf("tempAsChar (int)= %d and tempAsChar (char)= %c",tempAsChar,tempAsChar);

您应该看到输出:tempaschar(int)= 50和tempaschar(char)= 2