【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法
有时候我们需要将基本数据类型转化为字节,以便写入文件,然后必要时还需要将这些字节读出来。有人说,为啥不把数字直接存进文件呢?比如:100,000,000,我们直接存数字明文到文件那就是9个字符(char,9*8bit=9Byte),如果存int就是4Byte,差了一倍多,所以这样存不划算。
有三种方法:
1. 与运算,该方法适用于整数类型
思路就是利用0xff取与最低位,可将高位全置为0,而保留最地位,所以这样我们能得到整数的每一位的字节值(8bit=1Byte)
string toBytes( unsigned int x ) {
    std::size_t size = sizeof(x);
    std::size_t cnt = size;
    string _return(size,0);
    while( cnt-- ) {
        unsigned char byte = (unsigned char)((x>>((size-1-cnt)*8)) & 0xff);
        _return[ cnt ] = byte;
    }
    return _return;
}
unsigned int getUInt( const string & x ) {
    unsigned int _return = 0;
    for( std::size_t i = 0; i < x.size(); ++i ) {
        _return += static_cast<unsigned char>( x[x.size()-1-i]) *static_cast<unsigned int>(pow( 256, i ));
    }
    return _return;
}
2. 指针逐位读取字节
该思路就是我们可以把指针强制转化为char * ,因为指针本身就是一个长整型的整数而已,只不过是类型不同。转化之后,char*指针每加一就会移动一个字节,所以我们能逐个字节的读取到基本类型的数据。
string toBytes( double x ) {
    std::size_t size = sizeof(x);
    string _return(size,0);
    char * start = reinterpret_cast<char *>(&x);
    for(std::size_t i = 0; i<size; i++ ) {
        _return[i] = *(start + i);
    }
    return _return;
}
3. 指针强制转化
利用不通指针类型去批量读取字节个数。比如char*每次取值只取一个字节,而long*每次取8个字节。所以我们只要将目标类型的指针指向一片正确的内存区域,我们在利用该指针取值时就能得到正确的数据了。
double getDouble( const string & x ) {
    char * p = const_cast<char*>(x.c_str());
    double * _return = 0;
    _return = reinterpret_cast<double*>(p);
    return *_return;
}
【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法的更多相关文章
- Java基本数据类型、包装类与String类之间的转换
		
一.基本数据类型与包装类之间的转换: import org.junit.Test; public class MainTest { /** * 基本数据类型与包装类之间的转换 */ @Test pub ...
 - ndk学习之C语言基础复习----基本数据类型、数组
		
关于NDK这个分类在N年前就已经创建了,但是一直木有系统的记录其学习过程,当然也没真正学会NDK的技术真谛,所以一直也是自己的一个遗憾,而如今对于Android程序员的要求也是越来越高,对于NDK也是 ...
 - C#基础数据类型与字节数组(内存中的数据格式)相互转换(BitConverter 类)
		
在某种通讯协议中(如 Modbus),可能需要把一些基本的数据类型内存中的表示形式转换成以字节数组的形式,方便传送.C/C++中可以利用指针等操作完成,但C#中没有指针,咋办呢?可以用BitCon ...
 - C语言基础复习:字符,字符数组,字符串,字符指针
		
1. 概述2. 字符2.1 字符定义和大小2.2 字符的输入和输出2.3 字符的计算3. 字符数组3.1 字符数组的定义和大小3.2 字符数组的输入和输出3.3 字符数组的计算4. 字符串4.1 字符 ...
 - Go语言基础之基本数据类型
		
Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. 基本数据类型 整型 整型 ...
 - GO学习-(5) Go语言基础之基本数据类型
		
Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. 基本数据类型 整型 整型 ...
 - (IEEE-754) 字节数组与浮点数之间的互相转换(MODBUS float类型)
		
在做上位机开发过程中,经常会碰到字节数组与浮点数,整数等数据之间的转换,有时为了验证数据是否解析正确,得借助于IEEE浮点数工具,本文把基于c#实现的浮点数与字节数组(或16进制的字符串)转换的实现方 ...
 - Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换
		
public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...
 - 字符串、字节数组、流之间的相互转换以及文件MD5的计算
		
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace myMe ...
 - 数据结构基础之memset---有memset 抛出的int 和 char 之间的转换和字节对齐
		
今天晚上,在做滤波算法时,里面用到很多float 和int 以及char 之间的类型强制转换,后面滤波完发现图片有些区域块,有过度曝光的白光,我就跟踪,以为是char 字符数字数据溢出问题,加了0-2 ...
 
随机推荐
- Asp.net MVC使用Filter解除Session, Cookie等依赖
			
本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...
 - 5个示例带你学习AngularJS
			
直到现在,你或许已经听说过AngularJS了,一个改变你对web应用思考方式,由谷歌开发的令人兴奋的开源框架.关于它的文章已经写得非常之多,但我发现还是要写些给那些更喜欢快速且实际例子的开发者.当今 ...
 - android + red5 + rtmp
			
背景:在已有的red5服务器环境下实现android客户端的视频直播 要实现客户端视频直播就先先对服务器端有所了解 Red5流媒体服务器是Adboe的产品,免费并且是开源的,与Flash搭配的时候可谓 ...
 - Win7下硬盘安装Ubuntu 12.04.3双系统
			
一. 准备工作 1. 下载ubuntu镜像文件:Ubuntu-12.04.3-desktop-amd64.iso(4G及以上内存建议64位),注意这个amd并不是指amd芯片. 2. 下载硬盘分区工具 ...
 - date
			
更改时区 用系统备好的时区文件覆盖掉当前的配置文件,/etc/里装的是当前系统的配置文件 $sudo cp /usr/share/zoneinfo/Asia/Chongqing /etc/localt ...
 - Javascript为元素添加事件处理函数
			
document.getElementById("test").onclick = function(){ ... };
 - 在VMware上安装CentOS-6.5 minimal - 安装VMware Tools
			
由于CentOS-6.5 minimal很多工具都默认没有安装,安装VMwareTools需要用到Perl,所以老伯建议先配置好网络再接着安装. 网络配置方法可以参考在VMware上安装CentOS- ...
 - jQuery入门第二天&&&正则表达式完结篇——仿smarty引擎的制作
			
hi 周一完全的不在状态...中午还去观战,没有睡觉的我,晚上的smarty不知道能不能做完,加油吧 1.jQuery ---过滤性选择器(二)--- --[attribute=value]属性选择器 ...
 - Codeforces 460D Little Victor and Set --分类讨论+构造
			
题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...
 - POJ1276Cash Machine[多重背包可行性]
			
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 32971 Accepted: 11950 De ...