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漢