首页 > 编程知识 正文

c语言单个字符转数字,将16进制的字符串转成字符串

时间:2023-05-03 11:23:47 阅读:48850 作者:4052

假设存在十六进制字符串“99 a d1b 5226 a 37 e 3e 058 E3 b8e27 C2C 666”,该如何将该字符串转换为整数类型(按字节分隔)? 也就是转换为0x 99,0x ad,0x1B,…

代码实现c语言参考代码:

# include stdio.h # include stdlib.h # include string.h char * key=' 99 a d1b 5226 a 37 e 058 E3 b8e27 C2C 666 '; voidmain(void ) if ) strlen ) key )1) printf ) ' key的长度为奇数!' ); 返回; } char byte[3]={0}; char *p=key; char *endptr; 未指定的int RES; for(intI=0; Istrlen(key; i =2) memcpy(byte,key[i],2 ); RES=strtol(byte,endptr,16 ); printf(x )、res; }printf((n ); }测试结果:

99 a d1b 5226 a 37 e 3e 058 E3 b8e27 C2C 666说明:

中转换的字符串长度必须为偶数。 奇数情况下,可以用手弥补零用现金的重要函数是strtol,其原型是longintstrtol(constchar*str,char** endptr,int base ); strtol介绍长整型(const char * str,char** endptr,int base ); 【参数说明】

str是要转换的字符串,endstr是指向不能转换的第一个字符的指针,base是用于字符串str的二进制文件。

【函数说明】

strtol ) )扫描参数str字符串,并跳过前面的空格(例如空格、制表符缩进)。 isspace ) )函数可以检测到)将开始转换,直到遇到数字或正负符号(如果不是数字或字符串) ) )时退出转换并返回结果。

注意两点:

如果base的值为0,则默认使用十进制转换;如果检测到"0x "/"0x "的前置字符,则使用十六进制转换;如果检测到"0"的前置字符,则使用八进制转换。 如果endptr不为NULL,则endptr返回不满足条件而终止的字符指针。 endptr为NULL表示参数无效或未使用。 【返回值】

返回转换后的长整数数。 如果无法转换或str为空字符串,则返回0(0L )。 如果转换的值超出了long int可表示的范围,则函数返回limits.h头文件中定义的LONG_MAX或LONG_MIN,并将errno的值设置为ERANGE。

为了便于使用,代码重构可以将这个小功能提取到一个函数中。 我把它命名为hex_string_to_u8。

# include stdio.h # include stdlib.h # include string.htypedefunsignedcharu 8; inthex_string _ to _ u8 (const char * hex _ str,char *out ) if(strlen ) hex _ str )1) { printf ) '字符串的长度为奇数!' ); 返回- 1; } char byte[3]={0}; const char *p=hex_str; int j=0; for(intI=0; Istrlen(HEX_str ); i=2) memcpy(byte,p[i],2 ); out [ j ]=strtol (字节,空值,16 ); }返回0; } void hex dump (void *数据,int size ) if (size=0) return; int i; for(I=0; isize; I ) {printf(x ),() u8 * ) data ) [i]; }printf((n ); }voidmain(void ) char * key=' 99 a d1b 5226 a 37 e 3e 058 E3 b8e27 C2C 666 ); char res[16]={0}; hex_string_to_U8(key,res ); hexdump(RES,16 ); }参考资料:

c语言strtol ) )函数:将字符串转换为long(long ) _C语言中文网

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。