1. c語言中怎么把一個(gè)字節(jié)擴(kuò)展成2字節(jié)
沒有現(xiàn)成的方法, 自己寫代碼轉(zhuǎn)換
#include
// 調(diào)用時(shí)請(qǐng)保證t有不小于2*slen的空間
void b2w(const unsigned char *s, int slen, unsigned char *t)
{
unsigned char b;
for (int i=0; i>1) & 0x20) | ((b>>2) & 0x08) | ((b>>3) & 0x02);
*t++ = (b>>1) | b;
b = s[i] & 0x0F;
b = (b & 0x01) | ((b>=1;
}
putchar(' ');
}
putchar('/n');
}
void main()
{
unsigned char s[] = {0x82, 0x41, 0xCB};
unsigned char t[sizeof(s)*2] = {0x00};
b2w(s, sizeof(s)/sizeof(s[0]), t);
showbytes(s, sizeof(s)/sizeof(s[0]));
showbytes(t, sizeof(t)/sizeof(t[0]));
}
2. c語言中怎么把一個(gè)字節(jié)擴(kuò)展成2字節(jié)
沒有現(xiàn)成的方法, 自己寫代碼轉(zhuǎn)換#include // 調(diào)用時(shí)請(qǐng)保證t有不小于2*slen的空間void b2w(const unsigned char *s, int slen, unsigned char *t){ unsigned char b; for (int i=0; i { b = s[i] & 0xF0; b = (b & 0x80) | ((b>>1) & 0x20) | ((b>>2) & 0x08) | ((b>>3) & 0x02); *t++ = (b>>1) | b; b = s[i] & 0x0F; b = (b & 0x01) | ((b *t++ = (b }}// 按二進(jìn)制顯示字節(jié)數(shù)組void showbytes(unsigned char *s, int slen){ for (int i=0; i { unsigned char b = 0x80; for (int k=0; k { putchar((b&s[i])? '1': '0'); b>>=1; } putchar(' '); } putchar('/n');}void main(){ unsigned char s[] = {0x82, 0x41, 0xCB}; unsigned char t[sizeof(s)*2] = {0x00}; b2w(s, sizeof(s)/sizeof(s[0]), t); showbytes(s, sizeof(s)/sizeof(s[0])); showbytes(t, sizeof(t)/sizeof(t[0]));}。
3. C語言中數(shù)組怎么把任意兩個(gè)單字節(jié)的字符變成一個(gè)雙字節(jié)的字符
// 題主這個(gè)問題嘛,問的很有問題
// 計(jì)算機(jī)一般有兩種文字儲(chǔ)存方式,寬字節(jié)+多字節(jié)
// 寬字節(jié):用2或4個(gè)字節(jié)表示一個(gè)字(每種類型固定字節(jié)長(zhǎng)度)
// USC-2, USC-4
// 多字節(jié):用1到4個(gè)字節(jié)表示一個(gè)字(每種字用的字節(jié)不一樣)
// GBK, BIG5, UTF-8
兩個(gè)單字節(jié)變?yōu)橐粋€(gè)雙字節(jié),意味著這兩個(gè)單字節(jié)其實(shí)是一個(gè)雙字節(jié)能表達(dá)的字符的分別字節(jié)?
// 假設(shè)是這樣的
/* 以GBK為例子,嗯,微軟默認(rèn)控制臺(tái)內(nèi)碼為GBK */
比如“我”字,你得先查到內(nèi)碼為:CED2
從下面可以查。.當(dāng)然百度一下到處都是
/classcode/tools/encode_gb2312.asp
// 然后發(fā)現(xiàn),這個(gè)是多字節(jié)編碼,所以不考慮大小端
unsigned char a[3];
a[0] = 0xCE; a[1] = 0xD2; a[3] = 0x0;
printf(a); 就可以了
/* 以USC-2為例子 */
查到“我”編碼是0x6211
考慮到intel處理器都是小端(與我大摩托羅拉對(duì)著干)
unsigned char a[4];
a[0] = 0x11; a[1] = 0x62; a[2] = 0x0; a[3] = 0x0;
wprintf((wchar_t *)a); 就可以了
4. c語言中如何將十六進(jìn)制轉(zhuǎn)換成2個(gè)字節(jié)輸出
MSGLEGTH = 0x9001;
如果轉(zhuǎn)換成char*字符串形式,內(nèi)存中保存是什么數(shù)據(jù)呢 例如有可能是 0x00 0x00 0x90 0x01,
這樣轉(zhuǎn)換的字符可能就是 0x00 0x00 這樣肯定打印不出來,即使是0x90,0x01也是不可見字符。
LZ希望打印出9001吧。其實(shí)先建立個(gè)16進(jìn)制的表
char hex[]= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
然后一位一位解析
例如 int i = 78908 16進(jìn)制 0x1343c
int j;
第一個(gè)字節(jié)
j = 78908 %16;
可以輸出hex[j];
i = i /16;
以此類推,把前面的字符取出來。
5. 在C語言中怎么把一個(gè)數(shù)轉(zhuǎn)換成二進(jìn)制然后輸出
數(shù)據(jù)在內(nèi)存中本來就是以二進(jìn)制補(bǔ)碼存放的,設(shè)法從高字節(jié)至低字節(jié)一個(gè)bit一個(gè)bit地輸出到屏幕上即可。根據(jù)題面要求,輸出過程還要做以下工作:
從最高字節(jié)開始檢測(cè),全0的字節(jié)略去;
每8位增加輸出一個(gè)空格。
代碼如下:
12345678910111213141516//#include "stdafx.h"http://If the vc++6.0, with this line.#include "stdio.h"int main(void){ char *p; unsigned i,n,x=1<<sizeof(int)*8-1; printf("Input an integer。/n"); scanf("%d",&n); for(p=(char *)&n,i=sizeof(int)-1;i>0;i--) if(*(p+i)==0) x>>=8; else break; for(i=0;x;x>>=1) printf(++i%8 ? "%d" : "%d ",(n&x) || 0); printf("/n"); return 0;}
6. C語言中,如何將一個(gè)整形拆分成兩個(gè)Byte
Word2Byte(unsigned short n)
{
printf("%u: Low byte=0x%02X, high byte=0x%02X./n", n, n>>8, n&255);
}
或:
Word2Byte(unsigned short n)
{
unsigned byte num_l, num_h;
num_l = n & 255;
num_h = n >>8;
printf("%u: Low byte=0x%02X, high byte=0x%02X./n", n, num_h, num_h);
}
7. C語言中每個(gè)存儲(chǔ)單元是幾個(gè)字節(jié),它由幾個(gè)二進(jìn)制位構(gòu)成
計(jì)算機(jī)存儲(chǔ)單元以字節(jié)(BYTE)為單位,一個(gè)字節(jié) 由 8個(gè) 字元(bit),也就是 8個(gè) 二進(jìn)制位 構(gòu)成。
一個(gè) int , float, double 。. 需幾個(gè)字節(jié)存放,可以用 sizeof(int), sizeof(float), sizeof(double) 。計(jì)算。例如:
printf("int -- %d bytes/n",sizeof(int) );
printf("float -- %d bytes/n",sizeof(float) );