首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中将十六进制字符串转换为long

在C++中将十六进制字符串转换为long
EN

Stack Overflow用户
提问于 2020-07-01 02:51:42
回答 1查看 161关注 0票数 0

我正在为Ardunio编写我的第一个BLE系统,我正在将它构建在一个已经可以控制RGB条带的系统之上,目前,我正在使用十六进制数字来知道我在哪里设置了什么。

好了,修改一下问题,

代码语言:javascript
复制
#define BLE_RX 5
#define BLE_TX 4

SoftwareSerial BLE(BLE_RX, BLE_TX);

// set the startup color to white
unsigned long color = 0xFFFFFF;
// hold the last color set so we can off / on without losing prior settings
unsigned long lastColor = 0x000000;

void setup() 
{
  Serial.begin(9600);
  BLE.begin(9600);

  pinMode(GREEN_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  pinMode(BLUE_LED, OUTPUT);
  Serial.println("hello world");
}


void loop() {
  long r = ((color >> 16) & 0xFF);
  long g = ((color >> 8) & 0xFF);
  long b = (color & 0xFF);
  char data[100];
  analogWrite(RED_LED, r);
  analogWrite(GREEN_LED, g);
  analogWrite(BLUE_LED, b);

  readBLE();
}

long hstol(String recv){
  char c[6];
  recv.toCharArray(c, 6);
  return strtol(c, NULL, 16);
}

void readBLE(){
  if(BLE.available() > 0){
    String data = BLE.readString();
    if(data.length() == 6){
      lastColor = color;
      Serial.println(data);
      Serial.println(hstol(data));
      color = hstol(data);
    }
  }
}

当我第一次运行我的CPP时,LED条带是白色的,如果我通过BLE发送FF0000(红色),我的LED变成绿色,这是我的输出

FF0000应等于16711680时,00FF00 = 65280且0000FF =255时

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 03:59:04

本文代码中的错误来源:您使用的是一个6个字符的数组,而它应该是7个字符,以保存整个recv字符串。您的代码当前显示出一种未定义的行为,因为strtol会搜索空/空白字符来完成解析,这在char c[6]中是不存在的。

我建议使用这种类型的方法。它只是一行代码,不需要额外的内存来存储一些临时字符数组。(还可以节省时间,否则会浪费在复制十六进制字符串上)。

代码语言:javascript
复制
void setup() {
  Serial.begin(9600);
  
  String x1 = "FF0000";
  long y1 = strtol(x1.c_str(), NULL, 16); // <--
  Serial.print(y1); // prints 16711680
  Serial.println();
  
  String x2 = "0xFF0000";
  long y2 = strtol(x2.c_str(), NULL, 0); // <--
  Serial.print(y2); // prints 16711680
  Serial.println();
  
  long y3 = strtol(x2.c_str() + 2, NULL, 16); // <--
  Serial.print(y3); // prints 16711680
  Serial.println();
}

void loop() {
    
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62664285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档