将int16_t转换为uint_8t*

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之类,似乎很难将整数转换为字符串.

Ste*_*ner 5

类型的指针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.

  • 如果你有`uint8_t*secondVal;`你不应该做`std :: cout << secondVal;`因为它不是一个以空字符结尾的字符串.变量之后的所有内容也将被打印出来(你可能在那里有"Hello World").如果你想看到数值,你需要`std :: cout << static_cast <unsigned>(*secondVal)`.或者有人打算写`std :: wcout << L"Hello World"`并将`L`放在``...."中...... (2认同)