short转换为char,提取单字节

本文描述:将两个字节长度的wdVersion,分别提取出低字节和高字节的值,此方法可以用于不同类型不同长度的单字节提取!

(注释种的位操作的方法也可以,先 移位  后  位与  操作)

wdVersion的类型为 unsigned short。2字节

取变量wdVersion(长度2字节)的第一个字节的值!
        第一步,取首地址          &wdVersion
        第二步,强制转换          (char*)&wdVersion  将2字节data变成1字节!!!
        第三步,取值                *((char*)&wdVersion)

#include<WinSock2.h> //头文件,Windowssocket
#pragma comment(lib,"ws2_32.lib")//加载库文件
# include<stdio.h>

int main(void)
{
	WORD wdVersion = MAKEWORD(2, 1);//2.1  //typedef unsigned short      WORD; 两个字节
	//WSAStartup(,);
	
	//取变量wdVersion(长度2字节)的第一个字节的值!
		//第一步,取首地址          &wdVersion
		//第二步,强制转换          (char*)&wdVersion  将2字节data变成1字节!!!
		//第三步,取值              *((char*)&wdVersion)

	int a = *((char*)&wdVersion);  //取低字节:变成(char*)并取值
	int b = *((char*)&wdVersion+1);//取高字节:变成(char*)后+1,并取值

	int c = (char*)(&wdVersion);
	int d = (char*)(&wdVersion+1);
	
	int e = *(&wdVersion);//258,完整的short类型的值
	int f = *((char*)(&wdVersion) + 1);//同int b
    int g = *((char*)(&wdVersion + 1));-52,h的值取了第二个字节
	int h = *(&wdVersion + 1);//wdVersion首地址+2后的地址所存储的值,类型和值都未知

	/*
	//取字节的另一种方法:位操作!!!
	int c = (wdVersion>>8)&0xff;//取高字节
	int d = wdVersion & 0xff;//取低字节
	*/

	printf("a=%d b=%d c=%d d=%d e=%d f=%d g=%d h=%d\n", a, b,c,d,e,f,g,h);
	

	system("pause");
	return 0;
}

wdVersion=258= 0000 0001  0000 0010;高字节是1,低字节是2

十进制52428=》二进制1100 1100 1100 1100‬=》高字节1100 1100(此为补码)=》最高位代表负号 (-1得到反码)11001011=》(除符号位外各位取反)得到原码10110100=》去掉符号位得110100=52(绝对值)

验算:-52= (最高符号位)原码1011 0100 =(除符号位外各位取反)反码 1100 1011=(+1后得到)补码 11001100 

结论:

1.  (char*)的意义在于,将原本两个字节的short类型,断开成了单字节!

 

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将威纶通宏指令short转换为浮点数,可以按照以下步骤进行操作。 首先,需要了解威纶通宏指令short的表示方式。威纶通宏指令short是由16位二进制数表示的有符号整数,范围通常为-32768到32767。 接下来,将short转换为浮点数,可以使用类型转换操作。在威纶通宏指令中,可以使用vextend指令进行转换。 vextend指令用于将低精度数据转换为高精度数据。对于short类型的变量,可以使用vextend指令将其转换为浮点数。 具体操作为,首先将short类型的变量加载到一个寄存器中,然后使用vextend指令将该寄存器中的值转换为浮点数。转换后的浮点数可以存储在另一个寄存器中,或者直接使用。 需要注意的是,在转换过程中可能会丢失一些精度或者引入舍入误差。因此,在进行转换时,应该根据具体应用场景和需求来选择合适的策略。 总的来说,将威纶通宏指令short转换为浮点数可以使用vextend指令进行操作。通过将short类型的值加载到寄存器中,然后使用vextend指令进行转换,即可得到浮点数表示。 ### 回答2: 将威纶通宏指令short转换为浮点数可以使用以下步骤: 1. 首先,将short值作为操作数加载到威纶通宏中。 2. 然后,使用指令将该short转换为浮点数。威纶通宏中可能会有特定的指令用于执行此转换。这个指令将short值的二进制表示转换为浮点数的二进制表示。 3. 最后,将浮点数结果从宏中读取出来,并存储到相应的位置,以便进一步处理或输出。 需要注意的是,转换过程可能会涉及到浮点数的精度损失。由于short是一个整数类型,存储的是整数值,而浮点数是由符号位、指数位和尾数位组成的。因此,在将short转换为浮点数时,可能会导致精度丢失。这是由于浮点数的表示范围和精度有限的原因造成的。 因此,在实际应用中,需要根据具体情况来判断是否需要进行short到浮点数的转换,并且在使用结果时需要注意可能存在的精度问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值