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

C++ 如何将-120和120之间的int更改为char(或其他简单的保存为一个字节的方法),c++,char,type-conversion,int,byte,C++,Char,Type Conversion,Int,Byte,我正在读取一个传感器,每10分钟获取一次温度变化值。现在我把温度的变化保存为一个整数 温度变化的范围应该在-120和120之间,我想将温度变化保存到EEPROM,但我只有512字节的空闲空间,作为一个整数,值占2字节。因此,我认为我可以将该值分配给相应的char值,并将该char保存到EEPROM(因为这只需要一个字节),例如(例如“4”的“$”等),但是我看不到实现这一点的简单方法 我使用的是C++的ARDUINO IDE,我相信并要求在这里,因为它是一个真正的软件问题< /P> 我想我应该可

我正在读取一个传感器,每10分钟获取一次温度变化值。现在我把温度的变化保存为一个整数

温度变化的范围应该在-120和120之间,我想将温度变化保存到EEPROM,但我只有512字节的空闲空间,作为一个整数,值占2字节。因此,我认为我可以将该值分配给相应的char值,并将该char保存到EEPROM(因为这只需要一个字节),例如(例如“4”的“$”等),但是我看不到实现这一点的简单方法

我使用的是C++的ARDUINO IDE,我相信并要求在这里,因为它是一个真正的软件问题< /P> 我想我应该可以用像

int tempAsInt = -50;
char tempAsChar;

tempAsChar = char(tempAsInt);

但是第一个打印相同的字符(上下问号或空值)用于不同的临时值

第二个打印出的值与整数的值相同,也就是说,如果更改为-50,则打印为-50,因此我不确定它是否真的是一个字符,尽管可能我只是打印错了

我的打印代码是

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;
您应该看到输出:
tempAsChar(int)=50和tempAsChar(char)=2。我还找不到一个完全相同的问题,但如果你找到了,请随时告诉我。当你打印char
-50
时,你希望看到什么?打印
char
有“特殊行为”。不打印数值,而是将字符映射到该值,因为当打印
char
时,几乎每个人都希望看到该值。要查看存储的值,您必须将其转换回整数。@M.M,对于-50的整数值,无论对应的无符号字符值是什么,我只是尝试一下,所以不知道。我发现一些表将十进制值1到255分配给ASCII值,例如38->'&',50->'2',因此我认为可能有一个类似的符号字符,但显然我对其工作原理的基本理解是错误的。我对arduino的
打印
例程的机制不够熟悉,但是
无符号字符
可能是罪魁祸首。这里有一个问题,询问者寻找的是完全相反的行为,他们想要值,为了得到它,他们必须打印一个无符号字符类型:非常感谢,我在所有值中添加了128,以获得0到255之间的范围,现在只使用字符(而不是无符号字符)。我使用tempDiffAsChar=(char)tempDiffAsInt将值从整数转换为字符。现在,当我打印字符值时,它们与ASCII表匹配,最大值为128,对于大于128的值,我会得到一个从后到前的问号,我怀疑这只是因为arduino IDE没有设置为打印这些值,尽管我不确定,无论如何,只要它们被保存,这并不重要。将尝试使用EEPROM并查看其运行情况。为确保保存,请使用上面提到的printf行。检查打印为int的tempAsChar。
cout<<tempAsInt<<endl<<tempAsChar;
printf("tempAsChar (int)= %d and tempAsChar (char)= %c",tempAsChar,tempAsChar);