C++ 将uint16_t整数转换为存储在uint8_t数组中的UTF-8字符串

C++ 将uint16_t整数转换为存储在uint8_t数组中的UTF-8字符串,c++,utf-8,arduino,C++,Utf 8,Arduino,我正在做一个项目,涉及一个Arduino,它正在读取传感器数据,并通过一个BLE连接将数据传输到一个应用程序。我正在使用的传感器库返回一个uint16_t整数值,BLE库期望一个uint8_t[20]作为缓冲区。接收端的应用程序正在将数据解释为UTF-8字节。因此,我需要将uint16_t整数转换为UTF-8字符串,并将其存储在数组中 我在15年内还没有使用C++,所以这是我所能想出的最好的,但是它在很多方面都失败了。 // global vars for transmit buffer sta

我正在做一个项目,涉及一个Arduino,它正在读取传感器数据,并通过一个BLE连接将数据传输到一个应用程序。我正在使用的传感器库返回一个uint16_t整数值,BLE库期望一个uint8_t[20]作为缓冲区。接收端的应用程序正在将数据解释为UTF-8字节。因此,我需要将uint16_t整数转换为UTF-8字符串,并将其存储在数组中

我在15年内还没有使用C++,所以这是我所能想出的最好的,但是它在很多方面都失败了。
// global vars for transmit buffer
static uint8_t transmit_buffer[20];
static uint8_t transmit_buffer_size;

// read sensor data using vendor lib
uint16_t mm = sensor.read();

char buf[6];

transmit_buffer_size = sprintf(buf, "%d", mm);

// copy data buffer to transmit buffer
for(uint8_t i = 0; i < transmit_buffer_size; i++)
    transmit_buffer[i] = buf[i];

// transmit data
transmitter.send(transmit_buffer, transmit_buffer_size);

// zero out the transmit buffer after use
memset(transmit_buffer, 0x00, 20);   
//传输缓冲区的全局变量
静态uint8_t传输缓冲区[20];
静态uint8\u t传输缓冲区\u大小;
//使用供应商库读取传感器数据
uint16_t mm=传感器读取();
char-buf[6];
传输缓冲区大小=sprintf(buf,“%d”,毫米);
//将数据缓冲区复制到传输缓冲区
对于(uint8\u t i=0;i

做这件事的更好方法是什么?

您应该注意尾数问题。这与将其转换为
ASCII
字符串相同,因为
UTF-8
代码与
ASCII
数字一致。Menset是不必要的,因为您需要设置值later@Galik-我知道UTF-8与ASCII向后兼容,我只是不确定这是否是转换的最佳方式。我从大学就没有用过C++,我有点生疏了。MyItchyChin,你做的对我来说很好。我对Arduino不太了解,也不知道它是否带有受限库?否则,我怀疑人们可能会使用
std::to_string()
转换数字,然后将字符串复制到正确键入的缓冲区(
std::array buf{};
?)中进行传输
transmitter.send(buf.data(),buf.size())
。您应该注意尾数问题。这与将其转换为
ASCII
字符串相同,因为
UTF-8
代码与
ASCII
数字一致。Menset是不必要的,因为您需要设置值later@Galik-我知道UTF-8与ASCII向后兼容,我只是不确定这是否是转换的最佳方式。我从大学就没有用过C++,我有点生疏了。MyItchyChin,你做的对我来说很好。我对Arduino不太了解,也不知道它是否带有受限库?否则,我怀疑人们可能会使用
std::to_string()
转换数字,然后将字符串复制到正确键入的缓冲区(
std::array buf{};
?)中进行传输
transmitter.send(buf.data(),buf.size())