文档章节

char 数组转 int

兔之
 兔之
发布于 2016/07/09 17:28
字数 270
阅读 50
收藏 1

最近遇到一个问题,需要将多个 protobuf 序列化后存为文件,于是定了如下的协议格式。规定 PB1_size 以 4 字节大小存储在文件中。

[PB1_size][PB1_body][PB2_size][PB2_body]...[]

PBn_size 调用 fstream 流式操作以下列方式 write 写入

# include <fstream>
# include <iostream>
// msg 为 protobuf 结构体

fstream fs;
while (pb 未写完)
{
    uint32_t pb1_size = msg.ByteSize();
    fs.write(char*(&pb1_size), 4);
    msg.SerializeToOstream(&fs);
}

char*(&pb1_size) 取得 uint32_t 数据最低位字节的地址并强制转换为 char*,这样可以将 pb1_size 的四个字节以从低到高的方式写入文件。

读 pb 大小代码如下:

fstream fs;
char buffer[4];
fs.read(buffer, 4);
int size = atoi(buffer);

这样将 buffer 转为 size 会有问题,假设写入的 int 是 0x00000008,即 pb 大小为 8。写到文件里的二进制是 0x00000008。读到 buffer 里相当于字符串 "NUL NUL NUL BS",无法使用 atoi 来转换。

下面式例可以正常转换。

int main()
{
    char buffer_size[5];
    buffer_size[0] = 56;
    buffer_size[1] = 48;
    buffer_size[2] = 48;
    buffer_size[3] = 48;

    cout << atoi(buffer_size) << endl;
}

输入图片说明

http://blog.csdn.net/sealyao/article/details/6940245

© 著作权归作者所有

共有 人打赏支持
兔之
粉丝 67
博文 247
码字总数 95896
作品 7
深圳
程序员
私信 提问
CString,Char*,string 互相转换(转)

《C++标准函数库》中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”0“的字符串数组 2,c_str(),返回有”0“的字符串数组 3,copy() .....................

徐燕
2011/04/15
0
0
CString,int,string,char*之间的相互转换

string 转 CString CString.format("%s", string.cstr()); char 转 CString CString.format("%s", char); char 转 string string s(char ); string 转 char char p = string.cstr(); CString......

IMGTN
2012/05/28
0
0
C++ 中int,char,string,CString类型转换(一)

c++中string到int的转换 1) 在C标准库里面,使用atoi: #include <cstdlib> #include <string> std::string text = "152"; int number = std::atoi( text.cstr() ); if (errno == ERANGE) /......

simpower
2015/08/07
0
0
CString,int,string,char*之间的转换

《C++标准函数库》中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”0“的字符串数组 2,c_str(),返回有”0“的字符串数组 3,copy() .....................

橘子红了呐
2017/11/15
0
0
Java--数据类型及类型转换

Java数据类型: 基本数据类型又被称为主类型,并且每个主类型都有相对应的“封装器类型”。 boolean-1位、char-4位、byte-8位、short-16位、int-32位、long-64位、float-32位、double-64位。...

SuperHeroes
01/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

render常用模版 结合iview

表格添加一对按钮 { title: '操作', align: 'center', render: (h, params) => { return h('div', [ h('Button', { props: { ......

Carbenson
11分钟前
0
0
一次生产 CPU 100% 排查优化实践

前言 到了年底果然都不太平,最近又收到了运维报警:表示有些服务器负载非常高,让我们定位问题。 还真是想什么来什么,前些天还故意把某些服务器的负载提高(没错,老板让我写个 BUG!),不...

crossoverJie
18分钟前
7
0
Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现

作者 | Spring Cloud Alibaba 高级开发工程师洛夜 来自公众号阿里巴巴中间件投稿 前段时间 Hystrix 宣布不再维护之后(Hystrix 停止开发。。。Spring Cloud 何去何从?),Feign 作为一个跟 ...

Java技术栈
35分钟前
6
0
虚拟机加密

在超融合的基础设施和虚拟化成为常态的世界里,对加密的要求越来越高,越来越迫切,IT部门需考虑的重大安全问题和方法也浮现了出来。 物理数据中心时代,采取双保险式数据安全方法是相对简单...

linuxCool
38分钟前
2
0
MySQL 主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

野雪球
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部