如何将无符号字符转换为字符串



我正在使用ESP32板上的Mbed TLS库,我使用的函数仅接受无符号字符,并且还提供无符号字符作为输出

mbedtls_aes_setkey_enc( &aes, key, 256 );
mbedtls_aes_crypt_cbc( &aes, MBEDTLS_AES_ENCRYPT, 48, iv, input, output );

我现在需要使用这个方法显示输出

Heltec.display->drawString(0, 0, String(output));

但是这里它只接受字符串类型…如何将unsigned char转换为字符串呢?或者是否有更好的方法来显示输出(我使用的是带有0.96英寸显示器的Heltec LoRa32板)

这里是完整的代码

#include "mbedtls/aes.h"
#include "heltec.h"
mbedtls_aes_context aes;
unsigned char key[32];
unsigned char iv[16];
unsigned char input [128];
unsigned char output[128];
size_t input_len = 40;
size_t output_len = 0;
void setup() {
Heltec.display->init();
Heltec.display->flipScreenVertically();
Heltec.display->setFont(ArialMT_Plain_10);
delay(1500);
Heltec.display->clear();
Heltec.display->drawString(0, 0, "Heltec.LoRa Initial success!");
Heltec.display->display();
delay(1000);
mbedtls_aes_setkey_enc( &aes, key, 256 );
mbedtls_aes_crypt_cbc( &aes, MBEDTLS_AES_ENCRYPT, 48, iv, input, output );
}
void loop() {
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, String(output);
Heltec.display->display();
}

mbedtls_aes_crypt_cbc有'字符串'(无符号字符数组)作为输入和输出,而不是单个字符:

mbedtls_aes_crypt_cbc (mbedtls_aes_context *ctx, int mode, size_t length, unsigned char iv[16], const unsigned char *input, unsigned char *output)

drawString接受'string'(带符号字符数组)作为输入:

void U8X8::drawString(uint8_t x, uint8_t y, const char *s)

和你的output变量是字符数组,所以一切都是正确的(或者一些转换为有符号char指针可能是必要的)。

你忘了右括号:

Heltec.display->drawString(0, 0, String(output));

当然,如果'String'是一个转换:)

应该足够:

Heltec.display->drawString(0, 0, (char*)(output));

很好的评论是来自Remy Lebeau -输出是一个打乱的字节流,没有意义打印它们(更好地显示为HEX)。

最新更新