`
rain_2372
  • 浏览: 682343 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

c语言中unsigned类型和普通类型间的转换

    博客分类:
  • c
阅读更多
遇到了协议的加密解密和封装,其中经常遇到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下测试通过。大家如果有更好的方式,欢迎跟帖交流,我好对本文章进行更新,方便其它同仁学习。
分享到:
评论
2 楼 qq981378640 2015-10-26  
#include <stdio.h>

int main()
{
    unsigned int result = 0;
    unsigned char *p = (unsigned char *)&result;
    p[3] = 0x00;
    p[2] = 0x02;
    p[1] = 0x00;
    p[0] = 0x00;
    printf("result = %u\n", result);
    printf("result = %u\n", result);
    return 0;
}


1 楼 qq981378640 2015-10-26  
楼主你这样有点复杂了,直接这样写更好更方便
#include <stdio.h>

int main()
{
    unsigned int result = 0;
    unsigned char *p = (unsigned char *)&result;
    p[2] = 0x02;
    p[1] = 0x00;
    p[0] = 0x00;
    printf("result = %u\n", result);
    printf("result = %u\n", result);
    return 0;
}

相关推荐

    C语言中数据类型

    ### C语言中数据类型 #### 引言 在C语言编程中,理解并掌握各种数据类型是基础且关键的一部分。本文将详细介绍C语言中的几种基本数据类型:整型、浮点型、...希望本文能帮助您更好地理解和运用C语言中的各种数据类型。

    C语言实验(C语言数据类型及输入输出函数)[文].pdf

    整型分为长整型(long int)、短整型(short int)、普通整型(int)、无符号整型(unsigned int)、无符号短整型(unsigned short int)和无符号长整型(unsigned long int)。每种类型有不同的取值范围,例如长...

    3项目三数据类型、运算符与表达式C语言程序设计上机指导.docx

    在C语言中,数据类型分为基本类型和派生类型。基本类型包括整型、字符型、浮点型和 void 型。派生类型包括数组、指针、结构体、共用体和枚举类型。 在实验中,我们将集中讨论基本类型中的整型和字符型,以及它们...

    C语言知识点总结.pdf

    C语言中整数分为短整型(short int)、普通整型(int)和长整型(long int),以及有符号整型和无符号整型(unsigned int)。实数(浮点数)分为单精度(float)和双精度(double)类型。浮点数的表示形式包括基本形式、指数形式...

    c语言出错中英文对照表

    仔细检查函数原型和实际调用之间的匹配情况,确保参数数量和类型正确无误。 #### Array bounds missing (数组界限缺失) 当你尝试声明一个数组但没有指定其大小时,会出现这个错误。例如,在代码 `int arr[];` 中,...

    C语言解析教程(原书第4版)(美) 凯利.pdf

    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 标准函数库...

    C语言讲义.pdf

    C语言中有多种运算符,包括算术运算符、赋值运算符、复合运算符和自增自减运算符。 变量交换可以使用第三方变量,也可以不使用第三方变量。变量修饰符包括sizeof()、字符变量、bit、int、short、long、signed和...

    黑马C语言听课笔记

    通过以上总结可以看出,这份笔记涵盖了 C 语言中关于数组的基本操作、指针、内存管理、数据类型以及结构体等内容。通过对这些知识点的学习,可以帮助初学者更好地理解和掌握 C 语言的基础知识,并为进一步学习高级...

    C语言访问MCU寄存器的方式

    并且在`sfr_defs.h`中定义了 `_SFR_IO8` 宏以及 `_MMIO_BYTE` 宏,这些实际上都是对标准C的强制类型转换和指针操作的封装。 此外,GCC还提供了宏 `_BV` 来进行位操作。比如要设置DDRB的低两位,可以使用: ```c ...

    bin文件转换为C文件转换工具

    在IT行业中,我们经常需要处理各种格式的文件,其中二进制文件(.bin)和C源代码文件(.c)是两种常见的类型。.bin文件通常包含机器可执行的原始二进制数据,而.C文件是源代码,人类可读,包含了C编程语言的指令。...

    C语言编程规范PPT.pptx

    同时,本资源还详细介绍了C语言编程规范的各个方面,包括注释、标示符、类型、常量、声明和定义、初始化、算术类型转换、指针类型转换、表达式、控制表达式、控制流、Switch语句、函数、指针和数组、结构体和联合体...

    大学课程《高级程序设计技术(C语言)》PPT教学课件:第2章.pptx

    在C语言中,数据类型分为四大类:基本数据类型、构造数据类型、指针类型和空类型。 - 基本数据类型:包括字符型(char)、整型(int)、浮点型(float和double)等,它们是C语言中最基础的类型,不可再分解为其他类型。 -...

    c语言基础知识大全.doc

    C语言是计算机编程的基础语言之一,其...总的来说,C语言基础知识包括了变量和常量的概念、数据类型的理解和使用、变量初始化以及不同类型数据间的混合运算。掌握这些基础对于学习和理解C语言的其他高级概念至关重要。

    C语言中地址变量的用法

    在C语言中,地址变量和指针变量是编程中至关重要的概念,它们允许我们操作内存地址,实现数据的高效访问和传递。本文将深入探讨如何在C语言中使用地址变量和指针变量。 首先,地址变量是用来存储内存地址的变量。在...

    C语言格式化输出详细说明

    在C语言中,`printf` 函数和其他类似函数如 `fprintf`, `sprintf` 等都支持格式化输出。格式化输出通常遵循以下通用模式: ```c printf("format string", argument1, argument2, ..., argumentN); ``` 其中,...

    C语言的错误小集 C语言的错误

    在一个类型声明中同时使用了相互冲突的修饰符,例如同时声明一个变量为 `signed` 和 `unsigned`。 #### 19. 需要常量表达式(Constant expression required) 在某些情况下,例如数组大小、枚举成员等,需要使用...

    C语言编程规范ppt课件.ppt

    在变量声明和类型方面,C语言提供了多种选择,如int16_t、uint32_t等,这些都是为了确保数据类型的明确性和可移植性。规则6.1和6.2规定普通char类型应仅用于存储字符值,而signed和unsigned char则用于数值型数据。...

    C语言章节详细复习资料配例题

    - **数据类型**:包括整型(int)、无符号整型(unsigned int)、长整型(long int)、单精度浮点型(float)、双精度浮点型(double)和字符型(char)。 - **内存占用**:不同类型的数据占据不同数量的字节,...

    c语言的面试题-stu.pdf

    3.在C语言库函数中将一个字符转换成整型的函数是atol(),其原型为long int atol(const char *nptr); 四、指针和内存管理 1. unsigned char *p1; unsigned long *p2;请问p1+5=? ;p2+5=? ; p1+5指向p1当前指向的地址...

    《C语言程序设计》复习提纲

    - 赋值过程中也会发生类型转换,例如将浮点数赋值给整型变量时,浮点数的小数部分会被截断。 **9. 条件与逻辑运算** - `&&`和`||`运算符用于构建复杂的逻辑表达式。 - 在表达式`(m=a&gt;b)&&(n=c&gt;d)`中,首先计算布尔...

Global site tag (gtag.js) - Google Analytics