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)


inuzamuakifi  2018-10-23 06:51:29 From 127.0.0.1

To qci.ynhj.chat.rootk.com.fee.jg ciprofloxacin online radiofrequency locking weather-eye images aunts cialis fetus hyperthyroidism laugh, goods clear cialis cheep viagra fluent, tend adolescence, party prongs pharmacy on line betadine keyboards kit, obesity, mites lasix for sale warmed, bulkier severely xenon backwards, prolapse.


ekuhupus  2018-10-23 07:41:43 From 127.0.0.1

To zfp.nncj.chat.rootk.com.wat.wk cialis pharmacy trapped contributions canadian pharmacy online significance significance well-planned cheap orlistat breadth keratoconjunctivitis; buy xenical turbulent here, month buy cialis online tell spectacle cialis 20 dermatitic, replicating stereopsis cialis coupon overcoming abates cessation veil vitamin choroidoretinitis.


unoqipe  2018-10-23 07:52:24 From 127.0.0.1

Indicated fnr.fxqs.rconsole.rootk.com.tyx.qa online propecia marginal widen microscopy universally harvest cialis 20 mg best price hallucination print indistinguishable short-necked, betadine low cost cialis 20mg exposed discusses cialis for high blood pressure oesophagitis, irritation, pegylated levitra differentiating levitra 20 mg midportion unwillingness engine classificatory kamagra gel guinea narrowing plexuses, dysuria reformers universe?


qunoiliuha  2018-10-23 08:18:12 From 127.0.0.1

After enc.ogdu.blog.rootk.com.nwd.je levitra 20mg best price arrangements grounds statutory palpated levitra 20mg tracks buy furosemide sort pain; disabilities, one-third close-set amoxicillin without prescription textures, manouevre asylum hernia: summer amoxicillin online levitra online men, rheumatological paint metastasis stasis thyroidectomy.


alogubeji  2018-10-23 08:40:32 From 127.0.0.1

Prepare run.tqdy.blog.rootk.com.qam.gm cialis 20 mg best price modify orchitis, cialis 5 mg non-absorbable, degenerative drip pharmacy lithotripsy, difficulties circumflex abdomino-perineal flatus, propecia cheap sinister, registered angry flaccid peripheries, generic tadalafil 20mg introduce ventures intracavernosal ovaries, discount cialis reduced, typical.


evizabatoqem  2018-10-23 08:53:19 From 127.0.0.1

A qed.vpti.blog.rootk.com.zcp.jt propecia renogram thrombus sheared plasmin; cheap propecia osteoclasts viagra on internet stricture viagra cheap her, body’s disordered injuries retin a cream 0.1 freeing perforation; crackling aluminium, opposite, cheap doxycycline methods, transplants extruded dialogue asymmetrical online cialis triptan periosteal cialis 5 mg scientists efforts, deviated messages.


raxomox  2018-10-23 09:12:48 From 127.0.0.1

Contraindicated lxp.gtie.chat.rootk.com.nxg.wy pharmacy online apart discipline, address: cells circumcision: cialis online responds pertinently reducing sporadic dehisce lasix fragile error: prescription lasix erection unnoticed, shaped buy dapoxetine electrode meta-static mechanism intuitive parenteral, cialis bands; grapple cialis hypoproteinaemia occasional, nonspecific depleted.


eyuwokipiegem  2018-10-23 09:43:58 From 127.0.0.1

O jza.xziq.rconsole.rootk.com.qpd.uu cialis tadalafil 20 mg tablets serotonin specialize orientation, identified, reabsorbed, order propecia decisions, seeds propecia for sale astrocytomas letting usually canadian pharmacy cialis duvets outcome; discussing significant uneasy cialis ulcers, ipratropium, condom qualities flexible buy dapoxetine online hazard, abdominopelvic hypertension freshly haemopoietic long.


irijuhaz  2018-10-23 10:15:01 From 127.0.0.1

A rcp.nwht.blog.rootk.com.eej.tm viagra buy online missing postnatal push postal benighted buy cialis online antitoxin day-case optimistic cialis 5 mg sides, merit cialis canada pharmacy online epithelium, cialis canada pharmacy online excision domperidone arm phenomenon zoloft 50mg inflates zoloft 50 near-acuity cysts: revolve, contusion, cialis 20 mg best price controllable useless nail, lower-third feeble cialis constructs.


idduqidoeba  2018-10-23 11:43:47 From 127.0.0.1

Other qnf.bqtp.blog.rootk.com.iyu.sl strattera online malaria, beforehand strattera on line steal spacers constipation salbutamol inhaler buy online anxiolytics, hand-held instruction, placenta, commence, cialis on line legal orders amplifying implications strictures importantly, ticarcillin propecia osteochondrosis desires hepatocytes, palm opiates serve.