1. c语言中怎么把一个字节扩展成2字节
没有现成的方法, 自己写代码转换
#include
// 调用时请保证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语言中怎么把一个字节扩展成2字节
没有现成的方法, 自己写代码转换#include // 调用时请保证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 }}// 按二进制显示字节数组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语言中数组怎么把任意两个单字节的字符变成一个双字节的字符
// 题主这个问题嘛,问的很有问题
// 计算机一般有两种文字储存方式,宽字节+多字节
// 宽字节:用2或4个字节表示一个字(每种类型固定字节长度)
// USC-2, USC-4
// 多字节:用1到4个字节表示一个字(每种字用的字节不一样)
// GBK, BIG5, UTF-8
两个单字节变为一个双字节,意味着这两个单字节其实是一个双字节能表达的字符的分别字节?
// 假设是这样的
/* 以GBK为例子,嗯,微软默认控制台内码为GBK */
比如“我”字,你得先查到内码为:CED2
从下面可以查。.当然百度一下到处都是
/classcode/tools/encode_gb2312.asp
// 然后发现,这个是多字节编码,所以不考虑大小端
unsigned char a[3];
a[0] = 0xCE; a[1] = 0xD2; a[3] = 0x0;
printf(a); 就可以了
/* 以USC-2为例子 */
查到“我”编码是0x6211
考虑到intel处理器都是小端(与我大摩托罗拉对着干)
unsigned char a[4];
a[0] = 0x11; a[1] = 0x62; a[2] = 0x0; a[3] = 0x0;
wprintf((wchar_t *)a); 就可以了
4. c语言中如何将十六进制转换成2个字节输出
MSGLEGTH = 0x9001;
如果转换成char*字符串形式,内存中保存是什么数据呢 例如有可能是 0x00 0x00 0x90 0x01,
这样转换的字符可能就是 0x00 0x00 这样肯定打印不出来,即使是0x90,0x01也是不可见字符。
LZ希望打印出9001吧。其实先建立个16进制的表
char hex[]= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
然后一位一位解析
例如 int i = 78908 16进制 0x1343c
int j;
第一个字节
j = 78908 %16;
可以输出hex[j];
i = i /16;
以此类推,把前面的字符取出来。
5. 在C语言中怎么把一个数转换成二进制然后输出
数据在内存中本来就是以二进制补码存放的,设法从高字节至低字节一个bit一个bit地输出到屏幕上即可。根据题面要求,输出过程还要做以下工作:
从最高字节开始检测,全0的字节略去;
每8位增加输出一个空格。
代码如下:
12345678910111213141516//#include "stdafx.h"//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语言中,如何将一个整形拆分成两个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语言中每个存储单元是几个字节,它由几个二进制位构成
计算机存储单元以字节(BYTE)为单位,一个字节 由 8个 字元(bit),也就是 8个 二进制位 构成。
一个 int , float, double 。. 需几个字节存放,可以用 sizeof(int), sizeof(float), sizeof(double) 。计算。例如:
printf("int -- %d bytes/n",sizeof(int) );
printf("float -- %d bytes/n",sizeof(float) );