ASCII字符串转换成16进制
来源:互联网 发布:淘宝加盟1880是真的吗 编辑:程序博客网 时间:2024/06/06 00:30
最近遇到一个小问题,从网络接收到的包中含有MAC地址(ASCII字符格式,例如”74-29-AF-F2-30-D3”,共18个字符),按照约定我需要把它转换成6个字节的二进制数(74 29 AF F2 30 D3)。
收到的字符串“74-29-AF-F2-30-D3”,是ASCII编码的,内存中就是:37 34 2d 32 39 2d 41 46 2d 46 32 2d 33 30 2d 44 33(共18个字节),现在我要做的就是写一个函数把这个输入转换成6个字节的输出“74 29 AF F2 30 D3”.
思路就是把输入串中的相邻两个字符,变成输出中的一个字节(8bit)的高4bit和低4bit;以前两个字符为例,即把37->7,34->4,组成十六进制的0x74。代码如下(简化后的版本),注意要用到无符号类型,大体思路如下:
void ToHexString(){ unsigned char tmp[]="74-29-AF-F2-30-D3"; unsigned char MacinBinary[6] = {0}; int nMacBinIndex = 0; int nSrcNumforOneMac = 0; unsigned char nSrcByteValue = 0; unsigned char ntempMacByte = 0; for(int nSrcIndex=0; *(tmp+nSrcIndex)!='\0'; ++nSrcIndex) { if(*(tmp+nSrcIndex)!='-') { if(*(tmp+nSrcIndex)>='0' && *(tmp+nSrcIndex)<='9') nSrcByteValue = *(tmp+nSrcIndex) - '0'; if(*(tmp+nSrcIndex)>='A' && *(tmp+nSrcIndex)<='F') nSrcByteValue = *(tmp+nSrcIndex) - 'A' + 10; if(*(tmp+nSrcIndex)>='a' && *(tmp+nSrcIndex)<='f') nSrcByteValue = *(tmp+nSrcIndex) - 'a' + 10; //got the first half of one MAC byte if(nSrcNumforOneMac==0) { ++nSrcNumforOneMac; ntempMacByte = nSrcByteValue << 4; } else//the second half of one MAC byte { ntempMacByte |= nSrcByteValue; *(MacinBinary+nMacBinIndex) = ntempMacByte; ntempMacByte = 0; nMacBinIndex++; nSrcNumforOneMac = 0; } } } printf("\n%2x %2x %2x %2x %2x %2x\n",MacinBinary[0],MacinBinary[1],MacinBinary[2],MacinBinary[3],MacinBinary[4],MacinBinary[5]);}
0 0
- ASCII字符串转换成16进制
- 字符串转换成ASCII码
- 字符串转换成16进制//16进制转换成字符串//16进制转换成ASCII码
- 字符串怎样转换成整形 (ascii )
- ASP中字符串转换成ASCII码
- C# 八进制数值字符串转换成ASCII 字符串相互转换
- 字符串与ascii转换
- 使用python将用ASCII表示的16进制unicode编码的ASCII字符串转换为unicode字符串
- java如何将一个十六进制字符串转换成ASCII字符串
- 字符串与ascii的转换
- Ascii utf8 Unicode 字符串转换
- Java字符串转换为ASCII
- 字符串和AscII码转换
- ASCII码与字符串转换
- ASCII字符转换成二进制形式的字符串
- 把中英文混合的字符串转换成AscII
- C#如何将字符串转换成ASCII码
- 数值和ASCII之间的转换,ASCII转16进制
- 数据结构--期末课程设计
- 【Android】Android插件开发 —— 打开插件的Activity(代理方式)
- Java数据结构和算法系列2--数组
- ffmpeg学习笔记1--下载ffmpeg
- myeclpse中 JRE System Library和 javaEE library的区别
- ASCII字符串转换成16进制
- 监听者模式
- 开荒新系列之Leetcode: 003-Delete Node in a Linked List
- 使用AVPlayerViewController和AVPlayer播放视频 和 画中画(pictureInPicture)
- 【GitHub】如何在自己的项目中添加"Fork me on GitHub"标识
- 关于java web中字符编码和url编码的理解
- 开荒新系列之LeetCode: 004-Same Tree
- 15-12.27随笔
- JAVA 正则表达式要点总结