c语言中怎么把一个字节扩展成2字节(c语言中怎么把一个字节扩展成2字节)

2024-12-14 百科 86阅读 投稿:逆风昊

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) );

声明:沿途百知所有(内容)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们将尽快删除