遇到了协议的加密解密和封装,其中经常遇到unsigned类型的数据和普通数据类型间转来转去,所以经过研究,简单封装了几个函数,在这里分享给大家,有不足之处还望大家给予指正。
unsigned short unCharToUnShort(unsigned char* pBuf)
{
unsigned short result = 0;
result = (short)pBuf[0]*256;
result += (short)pBuf[1];
return result;
}
unsigned int unCharToUnInt(unsigned char* pBuf)
{
unsigned int result = 0;
result = (short)pBuf[0]*256*256*256;
result += (short)pBuf[1]*256*256;
result += (short)pBuf[2]*256;
result += (short)pBuf[3];
return result;
}
以上两个函数是把unsigned char*转换为unsigned short或unsigned int,数据的存放方式为高字节在前,低字节在后,比如无符号短整型256是0x01 0x00。我们通过依次获取低位的数据然后乘以0xFF,来获取低位所代表的整数值,然后再把各个位的值相加,得出最终需要的无符号整形值。其中把一个字节强转为short型,就是为了获取该字节的无符号整型值,因为一个short值占两个字符,我们这样强转,其实只用了short高位的那一个字节。
void unShortToUnChar(unsigned char* pBuf,unsigned short iValue)
{
pBuf[0] = (unsigned char)(iValue>>8);
pBuf[1] = (unsigned char)(iValue);
}
void unIntToUnChar(unsigned char* pBuf,unsigned int iValue)
{
pBuf[0] = (unsigned char)(iValue>>24);
pBuf[1] = (unsigned char)(iValue>>16);
pBuf[2] = (unsigned char)(iValue>>8);
pBuf[3] = (unsigned char)(iValue);
}
以上两个函数作用是把无符号整形转换为unsigned char型。所使用的方式是把整型值右移8的倍数,然后取高位强转为unsigned char后赋值给我们的unsigned char数组中的各个字节。
在做无符号数据类型和有符号数据类型转换的时候方式有很多,此处介绍的是我觉得比较简单且易懂的,代码已在VS和linux下测试通过。大家如果有更好的方式,欢迎跟帖交流,我好对本文章进行更新,方便其它同仁学习。
分享到:
相关推荐
### C语言中数据类型 #### 引言 在C语言编程中,理解并掌握各种数据类型是基础且关键的一部分。本文将详细介绍C语言中的几种基本数据类型:整型、浮点型、...希望本文能帮助您更好地理解和运用C语言中的各种数据类型。
整型分为长整型(long int)、短整型(short int)、普通整型(int)、无符号整型(unsigned int)、无符号短整型(unsigned short int)和无符号长整型(unsigned long int)。每种类型有不同的取值范围,例如长...
在C语言中,数据类型分为基本类型和派生类型。基本类型包括整型、字符型、浮点型和 void 型。派生类型包括数组、指针、结构体、共用体和枚举类型。 在实验中,我们将集中讨论基本类型中的整型和字符型,以及它们...
C语言中整数分为短整型(short int)、普通整型(int)和长整型(long int),以及有符号整型和无符号整型(unsigned int)。实数(浮点数)分为单精度(float)和双精度(double)类型。浮点数的表示形式包括基本形式、指数形式...
仔细检查函数原型和实际调用之间的匹配情况,确保参数数量和类型正确无误。 #### Array bounds missing (数组界限缺失) 当你尝试声明一个数组但没有指定其大小时,会出现这个错误。例如,在代码 `int arr[];` 中,...
14.2 变量和类型 14.3 类和抽象数据类型 14.4 重载 14.5 类的创建和销毁 14.6 面向对象编程和继承 14.7 多态和重写方法 14.8 applet 14.9 java的异常 14.10 java和oop的优势 14.11 总结 14.12 练习 附录a 标准函数库...
在IT行业中,我们经常需要处理各种格式的文件,其中二进制文件(.bin)和C源代码文件(.c)是两种常见的类型。.bin文件通常包含机器可执行的原始二进制数据,而.C文件是源代码,人类可读,包含了C编程语言的指令。...
C语言中有多种运算符,包括算术运算符、赋值运算符、复合运算符和自增自减运算符。 变量交换可以使用第三方变量,也可以不使用第三方变量。变量修饰符包括sizeof()、字符变量、bit、int、short、long、signed和...
本文旨在为读者提供一份详尽的C语言基础知识大全,将涵盖常量、变量、数据类型以及数据类型间的运算规则等核心概念。 首先,我们来探讨常量的概念。在C语言中,常量指的是在程序运行过程中其值不可改变的量。按照...
通过以上总结可以看出,这份笔记涵盖了 C 语言中关于数组的基本操作、指针、内存管理、数据类型以及结构体等内容。通过对这些知识点的学习,可以帮助初学者更好地理解和掌握 C 语言的基础知识,并为进一步学习高级...
并且在`sfr_defs.h`中定义了 `_SFR_IO8` 宏以及 `_MMIO_BYTE` 宏,这些实际上都是对标准C的强制类型转换和指针操作的封装。 此外,GCC还提供了宏 `_BV` 来进行位操作。比如要设置DDRB的低两位,可以使用: ```c ...
同时,本资源还详细介绍了C语言编程规范的各个方面,包括注释、标示符、类型、常量、声明和定义、初始化、算术类型转换、指针类型转换、表达式、控制表达式、控制流、Switch语句、函数、指针和数组、结构体和联合体...
在C语言中,数据类型分为四大类:基本数据类型、构造数据类型、指针类型和空类型。 - 基本数据类型:包括字符型(char)、整型(int)、浮点型(float和double)等,它们是C语言中最基础的类型,不可再分解为其他类型。 -...
在C语言中,地址变量和指针变量是编程中至关重要的概念,它们允许我们操作内存地址,实现数据的高效访问和传递。本文将深入探讨如何在C语言中使用地址变量和指针变量。 首先,地址变量是用来存储内存地址的变量。在...
在C语言中,`printf` 函数和其他类似函数如 `fprintf`, `sprintf` 等都支持格式化输出。格式化输出通常遵循以下通用模式: ```c printf("format string", argument1, argument2, ..., argumentN); ``` 其中,...
在一个类型声明中同时使用了相互冲突的修饰符,例如同时声明一个变量为 `signed` 和 `unsigned`。 #### 19. 需要常量表达式(Constant expression required) 在某些情况下,例如数组大小、枚举成员等,需要使用...
在变量声明和类型方面,C语言提供了多种选择,如int16_t、uint32_t等,这些都是为了确保数据类型的明确性和可移植性。规则6.1和6.2规定普通char类型应仅用于存储字符值,而signed和unsigned char则用于数值型数据。...
- **数据类型**:包括整型(int)、无符号整型(unsigned int)、长整型(long int)、单精度浮点型(float)、双精度浮点型(double)和字符型(char)。 - **内存占用**:不同类型的数据占据不同数量的字节,...
3.在C语言库函数中将一个字符转换成整型的函数是atol(),其原型为long int atol(const char *nptr); 四、指针和内存管理 1. unsigned char *p1; unsigned long *p2;请问p1+5=? ;p2+5=? ; p1+5指向p1当前指向的地址...
- 赋值过程中也会发生类型转换,例如将浮点数赋值给整型变量时,浮点数的小数部分会被截断。 **9. 条件与逻辑运算** - `&&`和`||`运算符用于构建复杂的逻辑表达式。 - 在表达式`(m=a>b)&&(n=c>d)`中,首先计算布尔...