Orb*_*den 3 c++ int arduino uint16 uint8t
我有一个库驱动的结果存储为int16_t值(它是一个负数,我可以使用绝对值)和另一个库函数,需要这个值几步之后,形式为uin8_t*.如何在不使用String的情况下完成此操作?
以下代码有效,但使用了可怕的字符串.有没有办法在不调用String或std :: string的情况下执行此操作?
void setup() {
Serial.begin(9600);
}
void loop() {
delay(5000);
String initialVal= String(-fetchInt());
Serial.print("Initial value is: ");Serial.println(initialVal);//prints "76"
uint8_t medianVal[sizeof(initialVal);
medianVal.getBytes(medianVal, sizeof(initialVal));
Serial.print("median value is: ");Serial.println(medianVal);//prints "76"
uint8_t* finalVal = medianVal;
Serial.print("final value is: ");Serial.println((char*)finalVal);//prints "76"
}
int16_t fetchInt(){
return -76;
}
Run Code Online (Sandbox Code Playgroud)
那么,如何将int16_t转换为uint8_t*?
在下面的评论中已经指出它
Serial.println(static_cast<unsigned>(*finalVal));
可行,但是这个解决方案将uint8_t转换为unsigned int,并且该方法需要uint8_t*.
我来自Java之类,似乎很难将整数转换为字符串.
类型的指针uint8_t
不能指向类型的对象int16_t
; 你需要复制值firstVal
,但是你需要一个单独的对象来取值.
uint8_t firstValAbs = firstVal >= 0 ? firstVal : -firstVal;
uint8_t* secondVal = &firstValAbs;
Run Code Online (Sandbox Code Playgroud)
注:uint8_t x = -34
会不会给你的绝对价值-34
,即它不会导致34
.你宁愿得到两个补码-34
,即255-34+1 == 222
.
归档时间: |
|
查看次数: |
139 次 |
最近记录: |