十六进制字符串转换为字节数组

由于协议转换,相邻协议所支持的数据类型存在差异,故存在数据类型转换的问题,如一个十六字节字符串“AD1D3DF4D5”需要转换为其表示的字节数组。

#include <stdio.h>
#include <string.h>
static void hexStr2Bytes(unsigned char *src, unsigned char *out)
{
        int m = 0, n =0;
        int len = strlen(src) / 2;
        int i = 0;
        for(i = 0; i < len; i++)
        {
                unsigned char m, n;
                if(src[2*i] >= 'A' && src[2*i] <= 'F')
                        m = src[2*i] - 'A' + 10;
                else // if(src[i] >= '0' && src[i] <= '9')
                        m = src[2*i] - '0';

                if(src[2 *i + 1] >= 'A' && src[2*i + 1] <= 'F')
                        n = src[2*i + 1] - 'A' + 10;
                else
                        n = src[2*i + 1] - '0' ;
                out[i] = (m << 4) | n;
        }
        printf("\n");
        int j = 0;
        while( j < len)
        {
          printf("%X", out[j]);
          j++;
        }
         printf("\n");
}

其输出结果:AD1D3DF4D5     

注意:由于此处输入一般是有程序自从产生,非手工输入,此函数中未考虑字符串中存在无效字符、小写字符和奇数个字符等异常情况。


版权声明:自由转载-非商用-非衍生-保持署名创意共享3.0许可证

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容