c语言中怎么把一个字节扩展成2字节
发布网友
发布时间:2023-04-28 00:19
我来回答
共2个回答
热心网友
时间:2023-10-25 08:44
没有现成的方法, 自己写代码转换
#include <stdio.h>
// 调用时请保证t有不小于2*slen的空间
void b2w(const unsigned char *s, int slen, unsigned char *t)
{
unsigned char b;
for (int i=0; i<slen; 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<<1) & 0x04) | ((b<<2) & 0x10) | ((b<<3) & 0x40);
*t++ = (b<<1) | b;
}
}
// 按二进制显示字节数组
void showbytes(unsigned char *s, int slen)
{
for (int i=0; i<slen; i++)
{
unsigned char b = 0x80;
for (int k=0; k<8; 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]));
}
热心网友
时间:2023-10-25 08:45
哈哈哈,好词昂发
热心网友
时间:2023-10-25 08:44
没有现成的方法, 自己写代码转换
#include <stdio.h>
// 调用时请保证t有不小于2*slen的空间
void b2w(const unsigned char *s, int slen, unsigned char *t)
{
unsigned char b;
for (int i=0; i<slen; 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<<1) & 0x04) | ((b<<2) & 0x10) | ((b<<3) & 0x40);
*t++ = (b<<1) | b;
}
}
// 按二进制显示字节数组
void showbytes(unsigned char *s, int slen)
{
for (int i=0; i<slen; i++)
{
unsigned char b = 0x80;
for (int k=0; k<8; 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]));
}
热心网友
时间:2023-10-25 08:45
哈哈哈,好词昂发