【问题标题】:C string to byte or binary (8 bit)C 字符串到字节或二进制(8 位)
【发布时间】:2016-02-29 16:09:11
【问题描述】:

我正在寻找一种用 C 语言将字符串转换为字节或二进制(8 位)的简单方法。我总是会收到一个 0 到 255 之间的字符串,例如:

  • 如果我收到“0”,我想将其转换为 00000000
  • 如果我收到“255”,我想将其转换为 11111111
  • 如果我收到“128”,我想将其转换为 10000000

这对我很有用,因为我正在用 C 语言为 PIC16F1705 实现代码,根据我通过 EUSART 模块收到的值,我将把这个值放入 PWM 模块中以控制直流电机的功率。我正在使用 MPLAB IDE 和 XC8 编译器,以便能够使用 C 而不是汇编。

【问题讨论】:

  • @MikeCAT:我认为这不是这个问题的正确副本(尽管从 OP 的措辞中不能完全清楚他们想要什么,诚然)。

标签: c string binary byte mplab


【解决方案1】:

您可以为此使用atoi,例如

#include <stdlib.h>

const char *s = "192";
uint8_t val = atoi(s);  // val = 192 = 11000000


如果您想避免引入库代码,尽管您始终可以针对此特定用例滚动您自己的 atoi 自定义版本,例如:
uint8_t atoi_u8(const char *p)
{
    uint8_t v = 0;
    while (*p)
    {
        v = v * 10 + *p - '0';
        p++;
    }
    return v;
}

【讨论】:

  • 先生,如果您不介意我问,atoi() 将无法区分数字 0 和故障,所以使用strtol() 不是更好吗? ?
  • @SouravGhosh:由于 OP 正在使用 PIC,我选择了一个简单、轻量级的解决方案,但如果稳健性可能是一个问题,那么他们总是可以解析输入字符串以确保它首先有效.
  • @SouravGhosh OP 还说他/她假设总是收到一个从 0 到 255 的字符串,包括 0 到 255。
  • @Lundin 你在哪里获取这些信息?我认为不会。 cplusplus.com 声明它在溢出时会导致未定义的行为。
  • @Lundin 不禁止小于 strtol 的 atoi 实现。
猜你喜欢
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 2012-05-08
相关资源
最近更新 更多