go 二进制数据处理

摘要:
=无{fmt.Println}fmt。打印//3.14159265358993}多模式解码编码包mainimportfunmain(){buf:=newvardata=[]接口{}{uint16,int8(-54),uint8,}for_,v:=rangedata{err:=binary.Writeifer!

以下是利用标准库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 二进制数据处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NOIP比赛写代码注意事项[word]2010中插入公式自动编号并且公式不自动缩小/变小下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Hadoop课程介绍

一、课程简介 1. Hadoop是什么? Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop是根据Google公司发表的MapReduce和Google档案系统的论文自行实作而成。 Hadoop框架透明地为应用提供可靠性和数据移动。它实现了...

想高效学会Hadoop,你要按照这个路线

学习hadoop,首先我们要知道hadoop是什么? 说到底Hadoop只是一项分布式系统的工具,我们在学习的时候要理解分布式系统设计中的原则以及方法,只有这样才能以不变应万变。再一个就是一定要动手,有什么案例,有什么项目一定要亲自动手去敲。 学习的时候不要害怕遇到问题,问题是最好的老师。其实学习的过程就是逐渐解决问题的过程,当你遇到的问题越来越少的时候,...

spark程序设计

Spark程序设计—创建RDD:从Scala集合构造成RDD parallelize(a, 3) makeRDD(a, 3) 他俩使用方式一样,只不过名字不一样 Spark程序设计—创建RDD:本地文件/HDFS textFile(path, 100) sequenceFile wholeTextFiles 举例: 1. 文本文件(TextInputFor...

Spark产生数据倾斜的原因以及解决办法

Spark数据倾斜 产生原因 首先RDD的逻辑其实时表示一个对象集合。在物理执行期间,RDD会被分为一系列的分区,每个分区都是整个数据集的子集。当spark调度并运行任务的时候,Spark会为每一个分区中的数据创建一个任务。大部分的任务处理的数据量差不多,但是有少部分的任务处理的数据量很大,因而Spark作业会看起来运行的十分的慢,从而产生数据倾斜(...

JSP中文乱码问题的由来以及解决方法

首先明确一点,在计算机中,只有二进制的数据! 一、java_web乱码问题的由来 1.字符集 1.1 ASCII字符集 在早期的计算机系统中,使用的字符非常少,这些字符包括26个英文字母、数字符号和一些常用符号(包括控制符号),对这些字符进行编码,用1个字节就足够了(1个字节可以表示28=256种字符)。然而实际上,表示这些字符,只使用了1个字节的7位,这...

HDFS集群数据不均衡处理

一、概述 公司使用是自己搭建的hadoop集群,版本2.7.3,最近发现出现了hdfs数据存储不均衡的现象,其中有一个datanode使用了65%,而有一个只使用了20%。hadoop集群使用的时间长了会出现这种数据不均衡的问题,当然hadoop提供了解决方案,就是使用balancer,默认进行的是datanode级别的数据均衡,但是2.X版本还不支持da...