近日在开发过程中,遇到一个问题。将字符串转为十六进制,利用snprintf转换str的格式。
下面贴上代码实现。
#include <stdio.h>
void test_printf5(char *str,int length)
{
int iii;
printf("the str is:");
for(iii= 0;iii <length;iii++)
{
printf("%02x ",str[iii]);
}
printf("\n");
}
/*str to hex,
字符串转换为16进制
利用snprintf 函数
int snprintf(char* dest_str,size_t size,const char* format,...);
功能:将可变参数以format的格式转换到dest_str中,并可以用%s打印出来。
1、dest_str:目标字符串,即输出字符串
2、size: 转换字符控制长度。
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0'),返回值为欲写入的字符串长度。
3、format :转换为某个格式,例如:%2d,%04X,%02X。
4、...:需要转换的字符串
*/
int str_to_hex(char *out_string,int length,char *in_string)
{
int index;
char *fmt = "%02x";
for(index = 0;index < length;index++)
{
snprintf((char *)&out_string[index<<1],3,fmt,in_string[index]);
}
return (length<<1);
}
int main(){
/*test snprintf*/
char string[20] = {0};
int size = 0;
char *in_string = "asfawwer888";
size = str_to_hex(string,sizeof(in_string),in_string);
printf("the size is %d\n",size);
printf("string is %s\n",string);
test_printf5(string,20);
}