C语言字节数组转换为基本数据类型
首先,必须明确基本类型在不同环境下字节的大小
这里用到了unsigned char:1 int:4 double:8
自己主要想用的是将字节数组转换为int型,double型
具体来说,将接收到的4字节数组数据转换为int型
将接收到的8字节数组数据转换为double型
java中有大量的函数可直接利用,C语言只能自己写了,主要用到了<string.h>中的memcpy函数
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{ int i;
int result_src=;
unsigned char message[];
int result_dst;
double money_src=200.00;
unsigned char s[];
double money_dst;
//={0XDe,0X04,0,0};
printf("unsigned char:%d int:%d double:%d\n",sizeof(unsigned char),sizeof(int),sizeof(double));
printf("\n正变换---将int型数据转换为4字节数组:\n");
memcpy(message,&result_src,sizeof(int));
for(i=;i<;i++)
{
printf("%x ",message[i]);
}
printf("\n逆变换---将4字节数组转换为int型数据:\n");
result_dst=message[]+(message[]<<)+(message[]<<)+(message[]<<);
// memcpy(&result_dst,message,sizeof(int));
printf("%d ",result_dst); printf("\n------------------------"); printf("\n正变换---将double型数据转换为8字节数组:\n");
memcpy(s,&money_src,sizeof(double));
//显示
for(i=;i<;i++)
{
printf("%x ",s[i]);
}
printf("\n逆变换---将8字节数组转换为double型数据:\n");
memcpy(&money_dst,s,sizeof(double));
//显示
printf("%f \n",money_dst);
system("pause");
return ;
}
将接收到的4字节数组数据转换为int型:
两种方法:1,移位 2.利用memcpy
result_dst=message[0]+(message[1]<<8)+(message[2]<<16)+(message[3]<<24);
将接收到的8字节数组数据转换为double型
利用memcpy
我们可以看到通过使用mempy既可以将基本数据转换为字节数组,亦可以将字节数组转换为基本数据类型,唯一需要注意的是位数问题 附注:(当出现大小端问题,解决思路)
在C/C++中,直接进行内存拷贝就可以了:
1
2
3
4
|
BYTE s[8]; memcpy (s,money, sizeof ( double )); int intMoney = ( int )(money*10); memmove (s,intMoney, sizeof ( int )); |
需要注意的是根据使用逻辑,如果需要字节逆序(这个很奇怪,因为通常是int类型需要)还是要做之后那个循环。另外就是数据类型了,double是8字节的格式存储,int是4字节逆序存储。
C语言字节数组转换为基本数据类型的更多相关文章
- Scala字节数组转换为数字
1. 2个字节数组转换为整数 def bytes2uint8(_bytes: Array[Byte], _offset: Int): Int = { val b0 = _bytes(_offset) ...
- java中把字节数组转换为16进制字符串
把字符串数组转换为16进制字符串 import java.security.MessageDigest; public class StringUtil { public StringUtil() { ...
- C#使用内存和指针方式将字节数组转换为Bitmap
/// <summary> /// 指针方式转 /// </summary> /// <param name="Width">图像的宽</ ...
- C语言一维数组转换为二维数组
一维转二维代码示例: #include <stdio.h> #include <stdlib.h> #define ROW 3 #define COL 2 int main(i ...
- c++字节数组转换为整型
http://bbs.csdn.net/topics/360132089 BYTE data[4]={0x00,0x00,0xe6,0x00};//第一句UINT a11=*(UINT*)data;/ ...
- C#结构体和字节数组的转换函数
在通信过程中,一般我们都会操作到字节数组.特别是希望在不同语言编程进行操作的时候. 虽然C#提供了序列化的支持,不用字节数组也行.但操作字节数组肯定会碰到. 一般都会采用结构来表示字节数组.但结构 ...
- mina 字节数组编解码器的写法 II
I 里面的写法不够严谨,这也是我之前说它简陋的主要原因,下面来个更加严谨.完整一点儿的: ByteArrayEncoder.java package org.bruce.mina.cpp.codec; ...
- Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换
public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...
- java对获取的字节数组进行处理
java对获取的字节数组bytes[]进行处理: 第一种,直接将该字节数组转换为字符串(部分): String content = ,); //从位置0开始获取2个字节 这样,对获取的数据报进行全部转 ...
随机推荐
- android Makefile把jar包打到apk里
这个是经常的需求,我就是经常忘,关键不理解啊. 反反复复的也看看了android makefile. 太复杂了. 慢慢来吧.哎.工作十年.啥也不会.咋整? ## Copyright (C) 2008 ...
- 《算法导论》习题2.3-5 二分搜索 Binary Search
地球人都知道“二分查找”,方法也非常简单,但是你能不能在10分钟内写出一个没有bug的程序呢? 知易行难,自己动手写一下试一试吧. public class BinarySearch { public ...
- 浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)
1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...
- Spark Standalone Mode
It is very easy to install a Spark cluster (Standalone mode). In my example, I used three machines. ...
- 微信小程序之----弹框组件modal
modal modal类似于javascript中的confirm弹框,默认情况下是一个带有确认取消的弹框,不过点击取消后弹框不会自动隐藏,需要通过触发事件调用函数来控制hidden属性. 官方文档 ...
- WCF必须使用证书验证吗
你说的 ASP.NET Web Service在消息头里加个字段,服务端做验证,这个是可以的,但是无法保证传输的用户名和密码是加密安全的. 要求使用证书,也是强制服务器端,这里涉及到服务器身份鉴别的问 ...
- pyv8安装
http://www.thinksaas.cn/topics/0/400/400915.html
- JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- gdb命令整理
Microsoft Windows XP [版本 ] (C) 版权所有 - Microsoft Corp. C:\Documents and Settings\Administrator>e: ...
- 关于老版本ubuntu源不能用的问题
在解决方向键为大写ABCD时安装vim 我的是Ubuntu 10.10 老版本 输入 sudo apt-get install vim 时出现 Package 'vim' has no install ...