天天看點

c語言字母轉換10進制,C語言中字元串與十進制的互相轉換

C語言中字元串與十進制的互相轉換

假設我有一個數6325,為了實作通訊,我要把這個數轉換成一個兩位元組的字元串,請問該如何轉換?

反過來我現在已知兩位元組的字元串,該如何得到十進制呢?

------解決方案--------------------

兩個位元組? 這個是要求?

如果沒有位元組限制可以直接用sprintf

#include "stdio.h"

int main(void)

{

int test = 6325;

char result[5] = {0};

sprintf(result, "%d", test);

printf("result is %s\n", result);

}

------解決方案--------------------

調用atoi就行了,實作也很簡單。 書上就有

------解決方案--------------------

引用:Quote: 引用:兩個位元組? 這個是要求?

如果沒有位元組限制可以直接用sprintf

是的,協定裡要求兩個位元組,對于unsigned short十進制轉字元串,我一個想法是先轉成二進制,然後高八位一個位元組,低八位一個位元組。

unsigned short 内部表示就是兩個位元組,

但是不是字元串,要定長,就轉換為16進制字元串4個位元組。

否則直接轉換為10進制大概5個位元組以内不定長。

直接庫函數的話,sprintf,sscanf 就可以滿足要求了,如果需要更快一點 atoi 和itoa,不過itoa 不能轉換成16進制字元串表示。

------解決方案--------------------

上面搞錯了,

itoa 能夠轉換成16進制字元串表,從 2~36進制都沒問題

不過atoi不能把16進制字元串,轉換成二進制(内部表示)

------解決方案--------------------

#include 

#include 

#include 

#include 

int main() {

int i,v;

char bs[33];

char b[33];

char hs[9];

char h[9];

char s[4];

char *e;

// 十進制整數轉二進制串;

i=1024;

ltoa(i,b,2);

sprintf(bs,"%032s",b);

printf("i=%d,bs=%s\n",i,bs);

// 十進制整數轉十六進制串;

i=1024;

ltoa(i,h,16);

sprintf(hs,"%08s",h);

printf("i=%d,hs=%s\n",i,hs);

// 十六進制字元串轉成十進制數

strcpy(hs,"00000400");

sscanf(hs,"%x",&i);

printf("hs=%s,i=%d\n",hs,i);

// 二進制字元串轉化為十六進制字元串;

strcpy(bs,"00000000000000000000010000000000");

i=strtol(bs,&e,2);

ltoa(i,h,16);

sprintf(hs,"%08s",h);

printf("bs=%s,hs=%s\n",bs,hs);

// 二進制字元串轉化為十進制數;

strcpy(bs,"00000000000000000000010000000000");

i=strtol(bs,&e,2);

printf("bs=%s,i=%d\n",bs,i);

// 十六進制字元串轉成二進制串

strcpy(hs,"00000400");

sscanf(hs,"%x",&i);

ltoa(i,b,2);

sprintf(bs,"%032s",b);

printf("hs=%s,bs=%s\n",hs,bs);

// ASC\GBK字元串轉十六進制串

strcpy(s,"a漢");

i=0;

while (1) {

if (0==s[i]) break;

sprintf(hs+i*2,"%02X",(unsigned char)s[i]);

i++;

}

setlocale(LC_ALL,"chs");

printf("s=%s,hs=%s\n",s,hs);

// 十六進制字元串轉成漢字(GBK)及字元(ASC)

strcpy(hs,"61BABA");

i=0;

while (1) {

if (1!=sscanf(hs+i*2,"%2x",&v)) break;

s[i]=(char)v;

i++;

}

s[i]=0;

printf("hs=%s,s=%s\n",hs,s);

return 0;

}

//i=1024,bs=00000000000000000000010000000000

//i=1024,hs=00000400

//hs=00000400,i=1024

//bs=00000000000000000000010000000000,hs=00000400

//bs=00000000000000000000010000000000,i=1024

//hs=00000400,bs=00000000000000000000010000000000

//s=a漢,hs=61BABA

//hs=61BABA,s=a漢