16进制字符串转换成字节数组

I_will_back 2013-05-27 12:52:32
char* str = "1122330066a5"


我想把它转换成这样的形式存在字节数组中,
unsigned char tmp[0] = 0x11;
unsigned char tmp[1] = 0x22
unsigned char tmp[2] = 0x33
unsigned char tmp[3] = 0x00
unsigned char tmp[4] = 0x66
unsigned char tmp[5] = 0xa5


求达人指点。
...全文
318 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2013-05-27
  • 打赏
  • 举报
回复
感觉提的问题有点模糊 字符串在内存里面是二进制的啊 你要哪里用直接转就是了啊 char* str = "1122330066a5" for(int i=0;i<strlen(str);i++) { printf("0x%2x\t",str[i]); //把每个字节用16进制打印出来瞧瞧 }
未注销 2013-05-27
  • 打赏
  • 举报
回复
void StringToHex(unsigned char* hex, char* str)
{
	int len = strlen(str);
	int tmp;
	for (int i = 0; i < len / 2; i++)
	{
		if (str[2*i] >= '0' && str[2*i] <= '9')
		{
			tmp = ((str[2*i] - '0') << 4);
		}
		else if (str[2*i] >= 'A' && str[2*i] <= 'F')
		{
			tmp = (((str[2*i] - 'A') + 10) << 4);
		}
		else if (str[2*i] >= 'a' && str[2*i] <= 'f')
		{
			tmp = (((str[2*i] - 'a') + 10) << 4);
		}

		if (str[2*i+1] >= '0' && str[2*i+1] <= '9')
		{
			hex[i] = tmp + (str[2*i+1] - '0');
		}
		else if (str[2*i+1] >= 'A' && str[2*i+1] <= 'F')
		{
			hex[i] = tmp + (str[2*i+1] - 'A') + 10;
		}
		else if (str[2*i+1] >= 'a' && str[2*i+1] <= 'f')
		{
			hex[i] = tmp  + (str[2*i+1] - 'a') + 10;
		}
	}
}
这样。不过效率好像有点低,代码也很丑陋,= =LZ可以将就用。
赵4老师 2013-05-27
  • 打赏
  • 举报
回复
char* str = "1122330066a5";
unsigned char tmp[9];//为什么这里是9而不是6呢?因为sscanf(str+10,"%2x",&tmp[5]);会tmp[5]=0xa5;tmp[6]=0;tmp[7]=0;tmp[8]=0;!
for (i=0;i<6;i++) sscanf(str+i*2,"%2x",&tmp[i]);
turing-complete 2013-05-27
  • 打赏
  • 举报
回复
亲,您忘了16进制的 abcdef 了。
引用 1 楼 Idle_Cloud 的回复:
一个循环搞定 tmp[i] = (str[2*i] - '0') << 4 + (str[2*i+1] - '0');
Carl_CCC 2013-05-27
  • 打赏
  • 举报
回复
一个循环搞定 tmp[i] = (str[2*i] - '0') << 4 + (str[2*i+1] - '0');

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧