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