目的是为了让字符数组中16进制数,以字符串的实现体现:
int atoi(const char *nptr);
int atoi(const char *nptr);
atoi 把字符数据转换为int类型
char *itoa (int value, char *str, int base );
返回值:返回指向str的指针,无错误返回。 [2]
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等,大小应在2-36之间
itoa 如何要在liunx中使用要添加源码程序,库里现在没有这个函数
int sprintf(char *string, char *format [,argument,…]);
- string-- 这是指向一个字符数组的指针,该数组存储了 C 字符串。
- format-- 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format
标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format
标签属性是%[flags][width][.precision][length]specifier - [argument]…:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了
format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
把argument以format 的类型添加到string中去
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
char* itoa(int num,char* str,int radix)
{/*索引表*/
char index[]="0123456789ABCDEF";
unsigned unum;/*中间变量*/
int i=0,j,k;
/*确定unum的值*/
if(radix==10&&num<0)/*十进制负数*/
{
unum=(unsigned)-num;
str[i++]='-';
}
else unum=(unsigned)num;/*其他情况*/
/*转换*/
do{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}while(unum);
str[i]='\0';
/*逆序*/
if(str[0]=='-')
k=1;/*十进制负数*/
else
k=0;
for(j=k;j<=(i-1)/2;j++)
{ char temp;
temp=str[j];
str[j]=str[i-1+k-j];
str[i-1+k-j]=temp;
}
return str;
}
int main()
{
char *s = "123";
int data;
int i = 0;
int number = 87;
int number1 = 0x00;
int len;
char string[25];
char string1[25];
int buf[] = {0x02, 0x30, 0x5a, 0x67, 0x00, 0x89, 0x01};
char buf1[25] = {};
char buf_data[1024] = {};
char single[] = "0";
len = sizeof(buf) / sizeof(buf[0]);
data = atoi(s);
printf("%d\n", data);
itoa(number, string, 10);
printf("%s\n", string);
itoa(number1, string1, 16);
printf("%s\n", string1);
for(i = 0; i < len; i++)
{
itoa(buf[i], buf1, 16);
printf("%s\n", buf1);
if(strlen(buf1) == 1) {
strcat(single, buf1);
strcat(buf_data, single);
} else {
strcat(buf_data, buf1);
}
memset(buf1, 0, sizeof(buf1));
}
printf("%s\n", buf_data);
}
kayshi@ubuntu:~/code$ ./atoi_itoa
123
87
0
2
30
5A
67
0
89
1
02305A67020890201
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
char* itoa(int num,char* str,int radix)
{/*索引表*/
char index[]="0123456789ABCDEF";
unsigned unum;/*中间变量*/
int i=0,j,k;
/*确定unum的值*/
if(radix==10&&num<0)/*十进制负数*/
{
unum=(unsigned)-num;
str[i++]='-';
}
else unum=(unsigned)num;/*其他情况*/
/*转换*/
do{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}while(unum);
str[i]='\0';
/*逆序*/
if(str[0]=='-')
k=1;/*十进制负数*/
else
k=0;
for(j=k;j<=(i-1)/2;j++)
{ char temp;
temp=str[j];
str[j]=str[i-1+k-j];
str[i-1+k-j]=temp;
}
return str;
}
int main()
{
char buf[]={0x10, 0x01, 0x34, 0x56, 0x00, 0x00, 0x78, 0x23};
char buf1[100]={};
char f[]="%";
char data[100];
char data1[100];
int i;
for(i=0; i<sizeof(buf); i++){
strcat(buf1, f);
itoa(buf[i], data, 16);
strcat(buf1, data);
}
printf("%s\n", buf1);
for(i=0; i<sizeof(buf); i++){
sprintf(data1+(i*3), "%%%02x", buf[i]);
}
printf("%s\n", data1);
}
结果
kayshi@ubuntu:~/code$ ./test11
%10%1%34%56%0%0%78%23
%10%01%34%56%00%00%78%23
来源:CSDN
作者:kayshi2018
链接:https://blog.csdn.net/weixin_36209467/article/details/103633719