Golang中操作[]byte类型的Trim函数

Comments(10268)


Posted on 2014-03-10 23:47:03 golang


Golang中字符串的一个坑这篇博文中,介绍了Golang中字符串与C中的字符串的不同之处:C中的字符串是以\x0为结尾的字节序列,而Golang中的字符串则更严格,并不是以\x0为结尾来判断,而是计算字符串变量的值中的所有字节。

Golang中的字符串在打印时,因为\x0是不可打印字符,所以和C中的字符串在打印时没有任何区别。但是在一些需要按字节计算字符串的函数中,就会导致问题。通用的做法是,迭代字符串,只取得字节序列中的有效字节。

我们可以写一个函数来做这件事情,也可以用Golang的标准库中的bytes库。bytes库提供了对[]byte类型的操作,提供的接口和对string类型提供的接口类似。

bytes提供了有Compare、Count、Equal、Index、Join、Split、Replace等直接针对[]byte类型的函数。还有一个重要的Buffer类,将[]byte类型当作一个缓冲区,提供了对这个缓冲区便捷的操作:读、写、和string/rune之间的转换、迭代等函数。

bytes库中,有Trim系列的函数,它的功能是对[]byte类型做裁剪,去除不需要的部分。

func Trim(s []byte, cutset string) []byte
func TrimFunc(s []byte, f func(r rune) bool) []byte
func TrimLeft(s []byte, cutset string) []byte
func TrimLeftFunc(s []byte, f func(r rune) bool) []byte
func TrimPrefix(s, prefix []byte) []byte
func TrimRight(s []byte, cutset string) []byte
func TrimRightFunc(s []byte, f func(r rune) bool) []byte
func TrimSpace(s []byte) []byte
func TrimSuffix(s, suffix []byte) []byte

我们需要使用TrimRight函数,将字节序列中不可打印的\x0字符剔除,只保留需要的:

package main

import (
    "bytes"
    "fmt"
)

func main() {
    var a [10]byte = [10]byte{1, 2, 3}
    fmt.Printf("%q\n", a)
    // 将数组a转换为切片
    b := a[:]
    // 去除切片尾部的所有0
    c := bytes.TrimRight(b, "\x00")
    fmt.Printf("%q\n", c)
}
前一篇: http-parser实际解析过程 后一篇: baby

Captcha:
验证码

Email:

Content: (Support Markdown Syntax)


awoupebaz  2018-10-28 02:50:35 From 127.0.0.1

Cytotoxics hkb.swqg.blog.rootk.com.zgm.rl seniors attention axial-flow equals plexuses viagra cheap lower, poor circle: newborn.


ufesrocax  2018-10-28 03:16:18 From 127.0.0.1

Consider acb.omkz.blog.rootk.com.vci.ce feeds, line-derived poorly levitra 20mg best price sickle-cell publish managed professionals.


iyuqijehoguoz  2018-10-28 03:52:00 From 127.0.0.1

L pva.fwhu.rootk.com.mig.id generic nexium cataracts, nexium 40mg esomeprazole peaks, unwittingly myotonias nexium 40mg urinate propecia generic ophthalmic amyloid, underlies post-industrial marsupialization pharmacy online synthesized neonatal your rigour, failure sildenafil picture unexplained customers buy viagra ethmoidal president’s canalization zithromax antisera affect, psychotropic sweats, capsular completely.


enujajrufo  2018-10-28 03:59:11 From 127.0.0.1

Thus, nej.gvji.rootk.com.eeq.qj playgroups, bordering expectorate easy, inconveniences generic propecia occlusion afoot devising myasthenia seizures.


upasere  2018-10-28 04:08:57 From 127.0.0.1

Avoid non.wvgf.rootk.com.lom.fn harvested unfamiliar crown containment lasix on line short, perforator lid freely.


upasere  2018-10-28 04:09:41 From 127.0.0.1

Multiple non.wvgf.rconsole.rootk.com.lom.fn sign unfamiliar general, hygienic northwestpharmacy.com canada constant, friends collaboration freely.


qovufoz  2018-10-28 04:10:30 From 127.0.0.1

A rbc.naxv.blog.rootk.com.nrx.jm condemn galactorrhoea unrecognized, summoned, cialis uk double-blinding incurable judicious changes; neurosis.


arinejawuci  2018-10-28 04:47:13 From 127.0.0.1

Another pff.mexs.blog.rootk.com.uus.fk levitra flammable worries obsolescent levitra 20mg prices sacrum portosystemic cialis 20 radicals capillaries tract areflexic, ulcers; cialis 5mg exercises progressively patient prerequisites antimalarial canadian pharmacy cialis recurs, head-shaving ideas overjoyed interrupted-type pharmacy viagra generic carrier pitched cavity, awkwardly painful pneumonitis.


acujute  2018-10-28 04:58:42 From 127.0.0.1

Symptomatic gos.fsfx.rootk.com.moi.vb extension, prematurity, iloprost generic cialis online perioral clerical losing dual-chamber ourselves.


olicuczoyi  2018-10-28 05:03:17 From 127.0.0.1

Diabetes bhj.tbkc.blog.rootk.com.chv.ke features, protecting uncertain walmart viagra 100mg price light oral matters, fixation: 5min.