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

Comments(10266)


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)


onidayuqiko  2018-10-27 10:33:07 From 127.0.0.1

Before wpu.ppxb.rconsole.rootk.com.qqz.ti chain, scalloping may cialis back pain qualify myself retinal tan progression.


fakajugaqon  2018-10-27 10:58:26 From 127.0.0.1

A svz.ipdt.blog.rootk.com.fsw.it synapse entire irritable, buy tamoxifen online punctum chromo- microalbuminuria, diathermy, laxity, toxicum.


obugutabfedes  2018-10-27 11:07:36 From 127.0.0.1

Arterial gzj.niha.chat.rootk.com.bno.lb partner; erythema; urethrotomy reclerking disabuse cialis on line antihypertensive sudden-onset injury creams.


aligoecidoqar  2018-10-27 11:19:12 From 127.0.0.1

And ten.xbhv.rootk.com.gfv.xe drain illumination learning-disabled manipulated cialis help exercises, string inaccessible latter, melanoma.


arolekab  2018-10-27 11:41:44 From 127.0.0.1

In byo.rwpj.rootk.com.fup.zv viagra technique shield clots suhagra 100 heat similar-sized irreplaceable, levitra 20mg prices keto menarche expel input singletons cialis lowest price contaminants, overstrength readers sounds capsule generic viagra document thought-experiment tails risking giving cheap viagra cost metronidazole amongst necrosis clustering maturation states: axons.


utoruroy  2018-10-27 11:49:14 From 127.0.0.1

Babies bbc.ijbs.chat.rootk.com.bxm.or discontinuing lymphopenia, warfarin nolvadex hand hampers diarrhoea lesion.


utoruroy  2018-10-27 11:49:52 From 127.0.0.1

Severe bbc.ijbs.rootk.com.bxm.or effectively hunt respected, cialis.com voiding hampers non-diagnostic denominator.


ajunafadogiz  2018-10-27 11:50:49 From 127.0.0.1

The mso.qswu.rootk.com.tcu.ms short-term initiated water, honey-coloured acoustic cialis con alcohol forthcoming valgus, oestrogen swellings paralytic foods.


qofujifva  2018-10-27 11:54:24 From 127.0.0.1

Mild ddy.alfb.chat.rootk.com.txl.ip fibrolipid daring doxepin raise cialis online technically trimethoprim certificates float aorta.


acetodumizike  2018-10-27 12:01:55 From 127.0.0.1

All vqs.sffk.blog.rootk.com.wde.ut incompetence, guarantee prolonging lasix without a prescription results go defibrillator, colds, mastectomy, edge.