文档章节

char 数组转 int

兔之
 兔之
发布于 2016/07/09 17:28
字数 270
阅读 48
收藏 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

© 著作权归作者所有

共有 人打赏支持
兔之
粉丝 66
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

Python介绍

Python介绍 一、简介 Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载等,有益于增强源代码的复用性。Python相对于Lisp这种传统的函数式编程语言,P...

星汉
10分钟前
0
0
VS_设置护眼背景色

工具---->选项---->环境---->字体和颜色:

一个小妞
13分钟前
0
0
Flask跨域请求的处理方法

在Flask开发RESTful后端时,前端请求会遇到跨域的问题。下面是解决方法: 使用 flask-cors库可以很容易的解决 pip install flask-cors 两种方法,一个是全局/批量的,一个是单一独立的: 安全...

ykbj
14分钟前
1
0
Pandas学习记录-Series

系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。 pandas.Series Pandas系列可以使用以下构造函数创建 - pandas.Series( dat...

kipeng300
21分钟前
0
0
可以实现内网穿透的几款工具

最近没什么事情,看了一些关于内网穿透的文章,因我本身已是做微信开发相关的工作,对这部分关注的比较多,现分享给大家。 首先说下内网穿透的原理。 NAPT原理 在NAT网关上会有一张映射表,表...

哥本哈根的小哥
22分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部