c++ - Arduino unsigned long int 到 char*

标签 c++ c arduino embedded

我在 Attiny85 上使用自定义的 IRremote 和 SSD1306 库进行编码。

当接收到 IR 数据时,结果以这种方式存储:

unsigned long                 value     // Decoded value, max 32 bits
volatile unsigned int         *rawbuf   // Raw interval in 50uS ticks
int                           rawlen    // Number of records in rawbuf

OLED显示相关功能有:

void printChar                (char ch)
void printString              (char* pText)

我正在努力将接收到的 IR 值打印到 OLED SSD1306 屏幕。用户能够查看接收到的代码并将其保存到 EEPROM,因此我尝试了所有不同的转换,但我无法以显示接收到的十六进制代码的方式将 results.value 打印到屏幕(例如 0xE0E040BF,这是在三星电视中开机)。

由于 attiny85 中 Serial 的滞后,我不知道如何调试它并让它工作。有帮助吗?

编辑(添加相关代码):

#include "SSD1306.h"
#include "IRremote.h"
...
if (irrecv.decode(&results)) {  
    dumpCode(&results);        
    irsend.sendRaw(buff, results.rawlen, 38);
    oled.printString("Received IR");
    // Print received hexadecimal IR code to the OLED screen
    irrecv.enableIRIn();    
    irrecv.resume();   
}

最佳答案

如果我理解正确,你只是想将一个 unsigned long 值转换成一个十六进制字符串,你可以使用 sprintf 来达到这个目的(ideone):

const unsigned int BUFFER_LENGTH = 16;
char buffer[BUFFER_LENGTH];
unsigned long value = 0xE0E040BF;
sprintf(buffer, "0x%08X", value);
printf("%s\n", buffer); // printString(buffer)

这样就可以将buffer传递给oled屏幕的printString方法。

格式说明符 %08X 指示 printf 为 format作为十六进制数的值,大写字母始终显示 4 个字节的所有 8 个十六进制值并用 0 填充。

关于c++ - Arduino unsigned long int 到 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228351/

相关文章:

c++ - gpu 蒙皮的矩阵计算

c++ - 错误 "expected initializer before ' 使用'"c++

c - 您将如何释放分配的内存?

c++ - 通过中间函数调用WriteConsole无法正常工作

python - 串行端口在重写的 Python 代码中不起作用

arduino - 使用 Arduino Uno 的 Wifi-direct(P2P)

c++ - 动态链接时共享库中的全局变量和静态变量会发生什么情况?

C++ 强制转换内存分配

c - 在 C 中使用 cvCalibrateCamera2

python - 在数字表示形式cpp和python之间转换