go 二进制数据处理
以下是利用标准库binary来进行编解码
编码
①使用bytes.Buffer来存储编码生成的串
②使用binary.Write来编码存储在①的buf中
package main import (
"bytes"
"encoding/binary"
"fmt"
) func main() {
var pi float64 = 3.141592653589793
buf := new(bytes.Buffer)
err := binary.Write(buf, binary.LittleEndian, pi)
// 这里可以继续往buf里写, 都存在buf里
// binary.Write(buf, binary.LittleEndian, uint16(12345))
if err != nil {
fmt.Println("binary.Read failed:", err)
}
fmt.Print(buf.Bytes())
// [24 45 68 84 251 33 9 64] }
解码
①使用bytes.NewReader/bytes.Buffer来存储要解码的ascii串
②使用binary.Read来解码
package main import (
"bytes"
"encoding/binary"
"fmt"
) func main() {
var pi float64
bpi := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
buf := bytes.NewReader(bpi)
err := binary.Read(buf, binary.LittleEndian, &pi)
// 这里可以继续读出来存在变量里, 这样就可以解码出来很多, 读的次序和变量类型要对
// binary.Read(buf, binary.LittlEndian, &v2)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
fmt.Print(pi)
// 3.141592653589793
}
Multi模式
解码
ing
编码
package main import (
"bytes"
"encoding/binary"
"fmt"
) func main() {
buf := new(bytes.Buffer)
var data = []interface{}{
uint16(61374),
int8(-54),
uint8(254),
}
for _, v := range data {
err := binary.Write(buf, binary.LittleEndian, v)
if err != nil {
fmt.Println("binary.Write failed:", err)
}
}
fmt.Printf("%x", buf.Bytes())
// beefcafe 这个是16进制串
// 这里转换为了16进制整数的串?
}
转自:http://studygolang.com/articles/713
go 二进制数据处理的更多相关文章
- jdbc基础 (三) 大文本、二进制数据处理
LOB (Large Objects) 分为:CLOB和BLOB,即大文本和大二进制数据 CLOB:用于存储大文本 BLOB:用于存储二进制数据,例如图像.声音.二进制文件 在mysql中,只有B ...
- Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析
以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...
- node.js—Buffer类(二进制数据处理模块)
Buffer类概述 一个用于更好的操作二进制数据的类 我们在操作文件或者网络数据的时候,其实操作的就是二进制数据流 Node为我们提供了一个更加方便的去操作这种数据流的类 Buffer,他是一个全局的 ...
- erlang二进制
在Erlang中写处理二进制数据的代码是洋溢着幸福感的,它对于二进制强大的表现力甚至能让你忘掉了它种种不便,今天我们说说Erlang的二进制数据处理. Erlang中bit string代表无类型的内 ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- [Erlang 0110] Erlang Abstract Format , Part 1
Erlang Abstract Format并不难懂,只是枯燥一点罢了,如果把Abstract Format的文档翻译出来,其实就是Erlang教科书中语法入门的部分. Erlang Abstract ...
- php配置参数.md
php 5.5 配置文件 php.ini Options user_ini.filename string 设定了 PHP 会在每个目录下搜寻的文件名:如果设定为空字符串则 PHP 不会搜寻.默认值是 ...
- heX——基于 HTML5 和 Node.JS 开发桌面应用
heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...
- Python2.2-原理之类型和运算
此节来自于<Python学习手册第四版>第二部分 一.Python对象类型(第4章) 1. Python可以分解成模块.语句.表达式以及对象:1.程序由模块构成:2.模块包含语句:3.语句 ...
随机推荐
- 【概率论】3-3:累积分布函数(Cumulative Distribution Function)
title: [概率论]3-3:累积分布函数(Cumulative Distribution Function) categories: Mathematic Probability keywords ...
- 洛谷P5369 [PKUSC2018]最大前缀和 [DP]
传送门 思路 这么一道签到题竟然没切掉真是丢人呢-- 首先有一个\(O(3^n)\)的SB方法,记录\(dp_{S,T}\)表示已经填进去了\(S\),当前最大前缀和集合为\(T\),随便转移.太简单 ...
- CodeForces - 999B Reversing Encryption
B - Reversing Encryption A string s of length n can be encrypted by the following algorithm: iterate ...
- Django基础之中间件的执行流程
当请求到达中间件以后,先按照正序执行每个注册中间件的process_request方法,process_request方法返回的值是None,就依次执行. 如果返回的值是HttpResponse对象, ...
- java单例问题
之前看资料,有人根据对象的创建时间将单例的实现分为懒汉式和饿汉式: 懒汉式: public class Singleton { private volatile static Singleton in ...
- 谷歌浏览器试调网页 多出font标签
突然发现一些按钮的点击功能失效,在控制台发现该a标签中多出个font标签,导致文字区域不能触发到a标签 就算a标签宽高设置百分百 也没用. 经测试不同的浏览器情况不一样 safari就不会出现这种情况 ...
- 我对java多进程多线程的浅显理解
linux内核调度算法--CPU时间片如何分配: http://blog.csdn.net/russell_tao/article/details/7103012(转载) ,通过该文章我们知道了进程 ...
- electron之环境安装、启动程序
1.安装node.js 2.安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org 3.安装全局electron n ...
- hey is a tiny program that sends some load to a web application.
hey is a tiny program that sends some load to a web application. DOS attack DOS攻击生成 https://github.c ...
- Unix/Linux下如何查看DNS服务器地址
使用命令: cat /etc/resolv.conf 或者 less /etc/resolv.conf 即可. 详细请见:http://www.cyberciti.biz/faq/how-to-fin ...