【问题标题】:Python's binascii.unhexlify function in CC 语言中 Python 的 binascii.unhexlify 函数
【发布时间】:2018-08-14 12:12:57
【问题描述】:

我正在构建一个程序,该程序将输入视为裸 MAC 地址并将其转换为二进制字符串。我在嵌入式系统上执行此操作,因此没有 STD。我一直在尝试类似于 this question 的东西,但是 2 天后我没有取得任何成就,我对这类事情真的很不好。

我想要的是输出等于目标,考虑到这一点:

#include <stdio.h>

int main() {
    const char* goal = "\xaa\xbb\xcc\xdd\xee\xff";
    printf("Goal: %s\n", goal);

    char* input = "aabbccddeeff";
    printf("Input: %s\n", input);

    char* output = NULL;
    // Magic code here

    if (output == goal) {
        printf("Did work! Yay!");
    } else {
        printf("Did not work, keep trying");
    }
}

谢谢,这是一个个人项目,我真的很想完成它

【问题讨论】:

  • 你需要分配空间来存储你的输出; char *output = NULL: 不会那样做。您需要使用strcmp() 来比较字符串;使用== 不起作用(它比较两个指针值;除非您使用output = goal;(或goal = output;),否则比较将失败)。您甚至没有展示将aa 转换为\xaa 的基本尝试。

标签: c string arduino hex ascii


【解决方案1】:

首先,您的比较应该使用strcmp 否则总是错误的。

然后,我会通过 2-char 读取字符串 2-char 并将每个“数字”转换为其值 (0-15),然后使用移位组合结果

#include <stdio.h>
#include <string.h>

// helper function to convert a char 0-9 or a-f to its decimal value (0-16)
// if something else is passed returns 0...
int a2v(char c)
{
    if ((c>='0')&&(c<='9'))
    {
        return c-'0';
    }
    if ((c>='a')&&(c<='f'))
    {
        return c-'a'+10;
    }
    else return 0;
}

int main() {
    const char* goal = "\xaa\xbb\xcc\xdd\xee\xff";
    printf("Goal: %s\n", goal);

    const char* input = "aabbccddeeff";
    int i;

    char output[strlen(input)/2 + 1];
    char *ptr = output;

    for (i=0;i<strlen(input);i+=2)
    {

       *ptr++ = (a2v(input[i])<<4) + a2v(input[i]);
    }
    *ptr = '\0';
    printf("Goal: %s\n", output);

    if (strcmp(output,goal)==0) {
        printf("Did work! Yay!");
    } else {
        printf("Did not work, keep trying");
    }
}

【讨论】:

  • 非常感谢,我测试了它,终于可以完美运行了!
猜你喜欢
  • 2011-10-12
  • 2016-08-19
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多