C語言應用:將128位二進制數據轉換為十六進制輸出


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
/**
  說明:利用c自帶<stdlib.h>里面得strtol函數做轉換
       (函數介紹見下),但strtol處理的最大位數為32位,即
       轉換所得的十六進制最多八位.作出如下處理,將128位
       二進制字符串按32位分段截取,分段轉換組成字符串輸出.
  日期:2006年6月28日
  作者:ahpo

*/

void main() {
  /** 128位二進制數字 字符串 */
  char s[] = "01100110101010110011010101011000110111010101011001101010101100011001101010101100110101010110001100110101010110011010101011001001";
  /** 待轉換字符串 字符串*/
  char b[32];
  /** 循環變量 INT */
  int j;
  /** 臨時變量 字符串 */
  char *end;
  /** 轉換輸出數組 LONG數組*/
  long i[4];

  for(j=0;j<4;j++) {
    /** 循環截取 存入待轉換字符串*/
    strncpy(b,s+j*32,32);
    /** 待轉換字符串賦結束符 */
    b[32]='/0';
    /** 轉換 */
    i[j] = strtol(b, &end, 2);
    /** 待轉換字符串清零 */
    b[0]='/0';

  }
  printf("The Bin str which need to be changed:%s/n",s);
  printf("The Hex result:");
  /** 結果輸出 */
  for (j=0;j<4;j++) {
    printf("%lx", i[j]);
  }

  getch();
}

/**

表頭文件 #include<stdlib.h>

定義函數 long int strtol(const char *nptr,char **endptr,int base);

函數說明 strtol()會將參數nptr字符串根據參數base來轉換成長整型數。

參數base范圍從2至36,或0。參數base代表采用的進制方式,如base值為10則采用10進制,若base值為16則采用16進制等。當base值為0時則是采用10進制做轉換,但遇到如'0x'前置字符則會使用16進制做轉換。一開始strtol()會掃描參數nptr字符串,跳過前面的空格字符,直到遇上數字或正負符號才開始做轉換,再遇到非數字或字符串結束時('/0')結束轉換,並將結果返回。若參數endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指針由endptr返回。

返回值 返回轉換后的長整型數,否則返回ERANGE並將錯誤代碼存入errno中。

附加說明 ERANGE指定的轉換字符串超出合法范圍。

*/

 

/**
附加說明:如果二進制字符串不足位,前面補0 即可,如果字符串超過128位,按上面循環即可,步驟省略
*/

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com