【问题标题】:c: sending string character by character as hex representation [duplicate]c:以十六进制表示逐个字符发送字符串[重复]
【发布时间】:2015-11-04 00:04:19
【问题描述】:
char str[] = "05AD2101";

我有一个函数 sendChar,我想将这个 str 字符以一对两个作为十六进制值发送,如下所示:

sendChar(0x05);

sendChar(0xAD);

sendChar(0x21);

sendChar(0x01);

我该怎么做?

【问题讨论】:

  • 你的意思是在 str 上循环,然后将每个循环发送到 sendChar()
  • 是的.. 但是如何将 str 转换为单独的十六进制
  • 不要使用智能引号,使用"45AD2101"和代码编辑器。
  • 哦,有很多方法。这似乎相当广泛。

标签: c arrays hex


【解决方案1】:

我没有测试这个,可能有语法错误:

int char2hex(char c){
   switch(c){
       case '0' : return 0x00;
       case '1' : return 0x01;
       case '2' : return 0x02;
       // until 9
       case 'A' : return 0x0a;
       case 'B' : return 0x0b;
       case 'C' : return 0x0c;
       // until F
   }
   return -1; // unknown char
}

void send(char str[]){
    if (!str)
        return;

    int i;
    for(i = 0; i < strlen(str); ++i)
        sendChar(char2hex(str[i]));
}

如果您需要更多帮助,请发表评论。

更新:

可能会有很多改进,检查 NULL,放置 const,检查小写 A、B、C、D、E、F 等。

你甚至可以做一些类似的事情 - 但在使用之前测试它:

int char2hex(char c){
   if (c < 'A')
      return c - '0';
   else
      return c - 'A' + 10;
}

【讨论】:

  • 检查send的参数。
  • 注意:做起来更简单for(i = 0; str[i]; ++i)
  • 但是对于 A char 我想要 0x0A.. 而对于 B 0x0B 等等
  • 10 与 0x0A 相同。如果你想表达你的意图,在开关中使用十六进制没有问题,例如case '1': return 0x01;。还要注意如果 switch 不匹配会发生什么,例如如果有 'R'。
  • @chux - 对,我会编辑。
猜你喜欢
  • 2019-02-21
  • 2013-06-07
  • 2013-07-26
  • 2013-01-09
  • 2018-01-31
  • 2012-09-25
  • 2019-08-10
  • 2015-03-09
相关资源
最近更新 更多