zoukankan      html  css  js  c++  java
  • 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!

  • 相关阅读:
    matlab线性规划
    matlab中fminbnd函数求最小或者组大值
    正方形和球体,利用蒙特卡洛计算pi值
    python 利用cvxopt线性规划
    K-NN(最近邻分类算法 python
    序列匹配,动态规划
    Block中修改局部变量的值为什么必须声明为__block类型
    iOS之初始化对象
    iOS对象模型学习
    C++对象模型学习
  • 原文地址:https://www.cnblogs.com/Higgerw/p/10226028.html
Copyright © 2011-2022 走看看