C语言一个字节转两个字节

时间:2022-06-26 10:34:06
我现在要把一个字节,转成两个字节,这两个字节中每两位等于一个字节的一位,
例如:
char x=b'11001011';
char a,b;
转换后
a=b'11110000'  等于x的高四位的每一位变成两位
b=b'11001111' 等于x的低四位的每一位变成两位
转换过程用C语言应该怎么写效率更高?

4 个解决方案

#1


移位 &
效率,差不多

#2


a=((x&0x0080)<<8)+((x&0x0080)<<7)+((x&0x0040)<<6)+((x&0x0040)<<5)+((x&0x0020)<<4)+((x&0x0020)<<3)+((x&0x0001)<<2)+(x&0x0001);写了2分钟,好费劲的,不知楼主满意不;

#3


@yangxf1217 算了,这个本来是用来放大打印机字体的,数据从单片机传送到打印头是SPI,本来想用单片机硬件SPI,这样的话要把字体放大一倍就得把一个字节放大为2个字节,一个字节转换为两个字节有点浪费时间了,我现在直接用软件模拟SPI了,这样的话发送一个BIT时钟脉冲两次就可以了,而且想把字体放大几倍就几倍,想放大几倍就时钟脉冲几次

#4


引用 3 楼 elflun 的回复:
@yangxf1217 算了,这个本来是用来放大打印机字体的,数据从单片机传送到打印头是SPI,本来想用单片机硬件SPI,这样的话要把字体放大一倍就得把一个字节放大为2个字节,一个字节转换为两个字节有点浪费时间了,我现在直接用软件模拟SPI了,这样的话发送一个BIT时钟脉冲两次就可以了,而且想把字体放大几倍就几倍,想放大几倍就时钟脉冲几次


这个打印机里边原来是这个样子的,多谢赐教啦!

#1


移位 &
效率,差不多

#2


a=((x&0x0080)<<8)+((x&0x0080)<<7)+((x&0x0040)<<6)+((x&0x0040)<<5)+((x&0x0020)<<4)+((x&0x0020)<<3)+((x&0x0001)<<2)+(x&0x0001);写了2分钟,好费劲的,不知楼主满意不;

#3


@yangxf1217 算了,这个本来是用来放大打印机字体的,数据从单片机传送到打印头是SPI,本来想用单片机硬件SPI,这样的话要把字体放大一倍就得把一个字节放大为2个字节,一个字节转换为两个字节有点浪费时间了,我现在直接用软件模拟SPI了,这样的话发送一个BIT时钟脉冲两次就可以了,而且想把字体放大几倍就几倍,想放大几倍就时钟脉冲几次

#4


引用 3 楼 elflun 的回复:
@yangxf1217 算了,这个本来是用来放大打印机字体的,数据从单片机传送到打印头是SPI,本来想用单片机硬件SPI,这样的话要把字体放大一倍就得把一个字节放大为2个字节,一个字节转换为两个字节有点浪费时间了,我现在直接用软件模拟SPI了,这样的话发送一个BIT时钟脉冲两次就可以了,而且想把字体放大几倍就几倍,想放大几倍就时钟脉冲几次


这个打印机里边原来是这个样子的,多谢赐教啦!