[001] 两个char字符合并成一个char字符串

  前段时间做了一个的项目,涉及到串口通信,通信报文格式为0x01 0x22 0xdf ...... 即需要将十进制数据转化成十六进制数据,并按照成对排列的格式组合在一起。进制转换只需循环执行“求商取余”的原则即可,但转换后的十六进制数据都是单个char字符,这就需要将字符两两合并。C/C++实现代码如下:

#include 
#include 

/*将多个char十六进制字符拼接成一个char字符(如0和a拼接成0x0a)*/
unsigned char catChar2Hex(unsigned char hByte,unsigned char lByte)
 {
	unsigned char ucTmp = 0x00;
	unsigned char hight;
	unsigned char low;
	if ( (hByte >= 'A') && (hByte <= 'F') )
		{
		hight = hByte - 'A' + 10;
	 }
	else if (hByte >= 'a' && hByte<='f')
		{
		hight = hByte - 'a' + 10;
	 }
	else if (hByte >= '0' && hByte <= '9')
		{
		hight = hByte - '0';
	 }
	else
		{
		ucTmp = 0xff;
	 }
	if ( (lByte >= 'A') && (lByte <= 'F') )
		{
		low = lByte - 'A' + 10;
	 }
	else if (lByte >= 'a' && lByte<='f')
		{
		low = lByte - 'a' + 10;
	 }
	else if (lByte >= '0' && lByte <= '9')
		{
		low = lByte - '0';
	 }
	else
		{
		ucTmp = 0xff;
	 }
	ucTmp = (hight<<4) | (low << 0);//高位左移4位,低位不移动,组成一个8位十六进制字符
	return ucTmp;
}

int main()
{
   int i,j;
   unsigned char catChar2Hex_get;
   unsigned char Date[2] = {'a','9'};
   catChar2Hex_get = catChar2Hex(Date[0],Date[1]);

   printf("传入的两个字符为:");
   for(i=0; i<2; i++)
    {
     printf("%c ",Date[i]);
    }
   printf("\r\n");
   printf("合并成一个字符为:0x%02x \n",int(catChar2Hex_get));  
}

运行结果如下:

此处主要参考这位博主的文章,但这篇文章里的第13行和29行撰写错误,会导致大于10的字符合并错误。

https://blog.csdn.net/xsq5956/article/details/80524114

你可能感兴趣的:(ROS,通讯)