Microcontroller 将UART中的字符串转换为c中的十六进制值

Microcontroller 将UART中的字符串转换为c中的十六进制值,microcontroller,pic,uart,Microcontroller,Pic,Uart,我在做pic控制器。我有一个字符串“040F”,它通过UART发送到控制器 我想将此字符串转换为十六进制表示形式,如0x040F。我尝试了一段代码片段,但没有成功 有人能帮我吗。如果你的意思是将十六进制字符串转换成二进制,下面的代码可以帮助你。它可能不是一个优化的解决方案,也可能是internet上提供的其他更简单的解决方案,甚至可能存在bug。但我希望这会给你一些想法 #include<stdio.h> #include<string.h> #define MAX_ST

我在做pic控制器。我有一个字符串“040F”,它通过UART发送到控制器

我想将此字符串转换为十六进制表示形式,如0x040F。我尝试了一段代码片段,但没有成功


有人能帮我吗。

如果你的意思是将十六进制字符串转换成二进制,下面的代码可以帮助你。它可能不是一个优化的解决方案,也可能是internet上提供的其他更简单的解决方案,甚至可能存在bug。但我希望这会给你一些想法

#include<stdio.h>
#include<string.h>
#define MAX_STR_LEN     16
int hex_char_to_bin(char ch)
{
        if(ch >= '0' && ch <= '9')
        {
                return (ch - '0');
        }
        else if(ch >= 'a' && ch <= 'f')
        {
                return (10 + ch - 'a');
        }
        else if(ch >= 'A' && ch <= 'F')
        {
                return (10 + ch - 'A');
        }
        return -1;
}
int hex_str_to_bin(const char *hex_str, int *result)
{
        int str_len, i;
        int bin_val = 0;
        str_len = strnlen(hex_str, MAX_STR_LEN);
        for (i = 0; i < str_len; i++)
        {
                int val = hex_char_to_bin(*hex_str++);
                if (val == -1)
                        return -1;

                bin_val = (bin_val<<4) + val;
        }

        *result = bin_val;
        return 0;
}

int main()
{
        char str[] = "043f";
        int hex;
        if(!hex_str_to_bin(str, &hex))
                printf("%x\n",hex);
        else
                printf("Invalid hex charecters in string\n");
        return 0;
}
#包括
#包括
#定义最大长度16
整型十六进制字符到二进制字符(字符通道)
{

如果(ch>='0'&&ch='a'&&ch='a'&&ch您尝试了什么代码段?出现了什么错误?您提供的相关信息越多,其他用户就越容易帮助您。请发布不起作用的代码。发布有效的代码没有意义;)十六进制格式是一种文本表示形式,您已经有了。如果您想将其转换为数值,可以尝试
sscanf
strtol
。问题寻求调试帮助(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:我认为在这里使用
pow()
是错误的。
pow()
适用于
double
s。换档将是一个更好的选择……可能如图所示。@jszakmeister是的,您是对的。谢谢您的更正:)