C语言定义 二进制 十六进制 普通字符串 转换函数

  直接上干货,没啥好说的:

代码1:十六进制转字符串函数

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<ctype.h>
 4 void Hex2Byte(const char* source, unsigned char* dest, int sourceLen)
 5 {
 6     short i;
 7     unsigned char highByte, lowByte;
 8     for (i = 0; i < sourceLen; i += 2)
 9     {
10         highByte = toupper(source[i]);
11         lowByte  = toupper(source[i + 1]);
12         if (highByte > 0x39)
13             highByte -= 0x37; //‘A‘->10 ‘F‘->15
14         else
15             highByte -= 0x30; //‘1‘->1 ‘9‘->9
16         if (lowByte > 0x39)
17             lowByte -= 0x37;
18         else
19             lowByte -= 0x30;
20         dest[i / 2] = (highByte << 4) | lowByte;
21     }
22 }
23 int main(){
24     char src[200]="466c6f776572732061726520736f20696e636f6e73697374656e74212042757420492077617320746f6f20796f756e6720746f206b6e6f7720686f7720746f206c6f76652068652e\0";
25     unsigned char buf[100]={0};
26     Hex2Byte(src,buf,strlen(src));
27     printf("%d\n",strlen(buf)); //打印一下生成十六进制字符串的长度
28     puts(buf);
29     return 0;
30 }

执行效果:

代码2:字符串转十六进制字符串函数

 1 #include<stdio.h>
 2 #include<string.h>
 3 //字符串转十六进制字符串
 4 void Str2Hex( const char *sSrc,  char *sDest, int nSrcLen )
 5 {
 6     int  i;
 7     char szTmp[3];
 8
 9     for( i = 0; i < nSrcLen; i++ )
10     {
11         sprintf( szTmp, "%02X", (unsigned char) sSrc[i] );
12         memcpy( &sDest[i * 2], szTmp, 2 );
13     }
14     return ;
15 }
16 int main(int argc, char const *argv[])
17 {
18     char source[100]="Hello world!\0";
19     char dest[100]={0};
20     Str2Hex(source,dest,strlen(source));
21     puts(dest);
22     return 0;
23 }

执行效果:

代码3:二进制字符串到十六进制字符串函数 1 #include <stdio.h>

 2 #include<string.h>
 3 void Bin2Hex(const char *sSrc,  char *sDest, int nSrcLen){
 4     int times=nSrcLen/4;
 5     char temp[times];
 6     int x=0;
 7     for(int i=0;i<times;i++){
 8         //int num=8*int(sSrc[i*4])+4*int(sSrc[i*4+1])+2*int(sSrc[i*4+2])+int(sSrc[i*4+3]);
 9         x=8*(sSrc[i*4]-‘0‘);
10         x+=4*(sSrc[i*4+1]-‘0‘);
11         x+=2*(sSrc[i*4+2]-‘0‘);
12         x+=sSrc[i*4+3]-‘0‘;
13         sprintf(temp+i,"%1x",x);
14     }
15     memcpy(sDest,temp,times);
16 }
17 int main()
18 {
19     char Hexstring[200]={0};
20     char Binarystring[600]="010001100110110001101111011101110110010101110010011100110010000001100001011100100110010100100000011100110110111100100000011010010110111001100011011011110110111001110011011010010111001101110100011001010110111001110100001000010010000001000010011101010111010000100000010010010010000001110111011000010111001100100000011101000110111101101111001000000111100101101111011101010110111001100111001000000111010001101111001000000110101101101110011011110111011100100000011010000110111101110111001000000111010001101111001000000110110001101111011101100110010100100000011010000110010100101110";
21     Bin2Hex(Binarystring,Hexstring,strlen(Binarystring));
22     printf("二进制串长度:%d,二进制串:%s\n十六进制串长度:%d,十六进制串:%s\n",strlen(Binarystring),Binarystring,strlen(Hexstring),Hexstring);
23     return 0;
24 }

执行效果:

代码4:

 1 #include<stdio.h>
 2 #include<string.h>
 3 //十六进制字符串转二进制字符串
 4 void Hex2Bin(char *source,char *dest,int len)
 5 {
 6     int i=0;
 7     char Dict[17][5] =
 8     {
 9         "0000", "0001", "0010", "0011",
10         "0100", "0101", "0110", "0111",
11         "1000", "1001", "1010", "1011",
12         "1100", "1101", "1110", "1111",
13     };
14     for(i=0;i<len;i++){
15         //char temp[5]={0};
16         int n = 16;
17         if (source[i] >= ‘a‘ && source[i] <= ‘f‘) n = source[i] - ‘a‘ + 10;
18         if (source[i] >= ‘A‘ && source[i] <= ‘F‘) n = source[i] - ‘A‘ + 10;
19         if (source[i] >= ‘0‘ && source[i] <= ‘9‘) n = source[i] - ‘0‘;
20          //sprintf(temp,"%s", Dict[n]);
21          //memcpy(&dest[i*4],temp,4);
22          memcpy(&dest[i*4],Dict[n],4);
23     }
24     return;
25 }
26
27 int main()
28 {
29     char Hexstring[64]="14a57bcf39\0";
30     char Binarystring[256]={0};
31     Hex2Bin(Hexstring,Binarystring,strlen(Hexstring));
32     printf("十六进制串长度:%d十六进制串:%s,\n二进制串长度:%d,二进制串:",strlen(Hexstring),Hexstring,strlen(Binarystring));
33     puts(Binarystring);
34     return 0;
35 }

执行效果:

代码5:最后,来一个等长二进制字符串异或函数

 1 #include<stdio.h>
 2 #include<string.h>
 3 //等长比特字符串异或
 4 int OZ_bin_xor( const char *s1,  char *s2, char *dest)
 5 {
 6     int  i;
 7     int temp1=0,temp2=0,temp3=0;
 8     if(strlen(s1)!=strlen(s2))
 9     {
10         printf("错误,不等长!\n");
11         return 1;
12     }
13     for( i = 0; i < strlen(s1); i++ )
14     {
15         temp1=s1[i]-‘0‘;
16         temp2=s2[i]-‘0‘;
17         temp3=temp1^temp2;
18         if(temp3==1)
19             dest[i]=‘1‘;
20         else if(temp3==0)
21             dest[i]=‘0‘;
22         else{
23             printf("字符串内容有误!\n");
24             return 1;
25         }
26     }
27     return 0;
28 }
29 int main(int argc, char const *argv[])
30 {
31     char s1[10]="1001011\0";
32     char s2[10]="0111010\0";
33     char s3[10]={0};
34     if(OZ_bin_xor(s1,s2,s3)!=0)
35     {
36         printf("函数出错!\n");
37         return 1;
38     }
39     puts(s1);
40     puts(s2);
41     puts(s3);
42     return 0;
43 }

执行效果:

Have Fun!

原文地址:https://www.cnblogs.com/Higgerw/p/10226028.html

时间: 2024-10-24 13:31:11

C语言定义 二进制 十六进制 普通字符串 转换函数的相关文章

【Linux C中文函数手册】 字符串转换函数

字符串转换函数 1)atof 将字符串转换成浮点型数 相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #include <stdlib.h>定义函数 double atof(const char *nptr);函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回.参数nptr字符串可包含正负号.小数点或E(e)来表示指数部分,如123.456或1

linux中字符串转换函数 simple_strtoul

Linux内核中提供的一些字符串转换函数: lib/vsprintf.c [html] view plain copy print? 1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 2. unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) 3. long simple_st

ASP字符串转换函数用法

Asc(str)返回第一个字符的ASCll符号 InStr(start,str1,Str2)从字符串str1的start位置开始查找str2) Lcase(str)将字符串str中的所有字符转换为小写 Left(str,len)返回字符串str中最左侧长度为len的字符串 len(str)返回字符串str长度 Ltrim(str)去除str左边的空格 Mid(str,start,Len)返回从str的start字符开始的len个字符. Right(str,len)返回右边的len个字符 Rtri

VC++编程中常用的字符串转换函数

VC++编程中经常遇到不同编码编码的字符串之间需要转换的情况,以下简单提供几个不同编码字符串之间的转换函数: ANSI 字符串和Unicode字符串之间的转换 //Convert wide char string to ANSI string BOOL WCharToMByte(LPCWSTR lpcwszStr,Std::string &str) { DWORD dwMinSize=0; LPSTR lpszStr=NULL; dwMinSize= WideCharToMultiByte(CP

strtol字符串转换函数应用实例

原型:long int strtol(const char *nptr,char **endptr,int base); 相关函数 atof,atoi,atol,strtod,strtoul 头文件:stdlib.h 功能:将字符串转换成长整型 说明: 1.参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等.当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换.遇到'0'前置字

strtod字符串转换函数应用实例

原型:double strtod(const char *nptr,char **endptr); 相关函数 atoi,atol,strtod,strtol,strtoul 头文件:stdlib.h 功能:将字符串转换成浮点数 说明:strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回.若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回.参数npt

atoi字符串转换函数应用实例

原型:int atoi(const char *nptr); 相关函数 atoi,atol,strtod,strtol,strtoul 头文件:stdlib.h 功能:将字符串转换成整型数 说明:参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数.否则,返回零.比如字符串123.678非数字部分即"."之后全部舍弃 返回值:返回转换后的整型数. 参数:nptr取任意字符串 应用实例: #inc

strtoul字符串转换函数

原型:unsigned long int strtoul(const char *nptr,char **endptr,int base); 相关函数 atof,atoi,atol,strtod,strtoul 头文件:stdlib.h 功能:将字符串转换成无符号长整型数 说明: strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数.参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等

iOS 十六进制和字符串转换

NSString *dictString = [dict JSONFragment];//组合成的. dictString==={"content":"Sadgfdfg","phoneno":"","email":"[email protected]"}=== // 十六进制转换为普通字符串的. + (NSString *)stringFromHexString:(NSString *)