成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Golang 中整數(shù)轉(zhuǎn)字符串的方法

Golang 中整數(shù)轉(zhuǎn)字符串的方法

熱門標(biāo)簽:鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 濱州自動電銷機(jī)器人排名 黃岡人工智能電銷機(jī)器人哪個好 惠州電銷防封電話卡 阿里云ai電話機(jī)器人 浙江高頻外呼系統(tǒng)多少錢一個月 釘釘有地圖標(biāo)注功能嗎 汕頭小型外呼系統(tǒng) 建造者2地圖標(biāo)注

整形轉(zhuǎn)字符串經(jīng)常會用到,本文討論一下 Golang 提供的這幾種方法?;?go1.10.1

fmt.Sprintf

fmt 包應(yīng)該是最常見的了,從剛開始學(xué)習(xí) Golang 就接觸到了,寫 ‘hello, world' 就得用它。它還支持格式化變量轉(zhuǎn)為字符串。

func Sprintf(format string, a ...interface{}) string
Sprintf formats according to a format specifier and returns the resulting string.
fmt.Sprintf("%d", a)

%d 代表十進(jìn)制整數(shù)。

strconv.Itoa

func Itoa(i int) string
Itoa is shorthand for FormatInt(int64(i), 10).
strconv.Itoa(a)

strconv.FormatInt

func FormatInt(i int64, base int) string
FormatInt returns the string representation of i in the given base, for 2 = base = 36. The result uses the lower-case letters ‘a(chǎn)' to ‘z' for digit values >= 10.

參數(shù) i 是要被轉(zhuǎn)換的整數(shù), base 是進(jìn)制,例如2進(jìn)制,支持2到36進(jìn)制。

strconv.Format(int64(a), 10)

Format 的實(shí)現(xiàn)

[0, 99)的兩位整數(shù)

對于小的(小于等于100)十進(jìn)制正整數(shù)有加速優(yōu)化算法:

if fastSmalls  0 = i  i  nSmalls  base == 10 {
 return small(int(i))
}

加速的原理是提前算好100以內(nèi)非負(fù)整數(shù)轉(zhuǎn)換后的字符串。

const smallsString = "00010203040506070809" +
 "10111213141516171819" +
 "20212223242526272829" +
 "30313233343536373839" +
 "40414243444546474849" +
 "50515253545556575859" +
 "60616263646566676869" +
 "70717273747576777879" +
 "80818283848586878889" +
 "90919293949596979899"

可以看出來,轉(zhuǎn)換后的結(jié)果是從1到99都有,而且每個結(jié)果只占兩位。當(dāng)然個人數(shù)的情況還得特殊處理,個位數(shù)結(jié)果只有一位。

func small(i int) string {
 off := 0
 if i  10 {
  off = 1
 }
 return smallsString[i*2+off : i*2+2]
}

如果被轉(zhuǎn)換的數(shù)字是個位數(shù),那么偏移量變成了1,默認(rèn)情況是0。

只支持2到36進(jìn)制的轉(zhuǎn)換。36進(jìn)制是10個數(shù)字加26個小寫字母,超過這個范圍無法計(jì)算。

var a [64 + 1]byte

整形最大64位,加一位是因?yàn)橛袀€符號。轉(zhuǎn)換計(jì)算時,要分10進(jìn)制和非10進(jìn)制的情況。

10進(jìn)制轉(zhuǎn)換

10進(jìn)制里,兩位兩位轉(zhuǎn)換,為什么這么干?兩位數(shù)字時100以內(nèi)非負(fù)整數(shù)轉(zhuǎn)換可以用上面的特殊情況加速。很有意思。

us := uint(u)
for us >= 100 {
 is := us % 100 * 2
 us /= 100
 i -= 2
 a[i+1] = smallsString[is+1]
 a[i+0] = smallsString[is+0]
}

2、4、8、16、32進(jìn)制的轉(zhuǎn)換。

const digits = "0123456789abcdefghijklmnopqrstuvwxyz"

var shifts = [len(digits) + 1]uint{
  1  1: 1,
  1  2: 2,
  1  3: 3,
  1  4: 4,
  1  5: 5,
}

if s := shifts[base]; s > 0 {
 // base is power of 2: use shifts and masks instead of / and %
 b := uint64(base)
 m := uint(base) - 1 // == 1s - 1
 for u >= b {
 i--
 a[i] = digits[uint(u)m]
 u >>= s
 }
 // u  base
 i--
 a[i] = digits[uint(u)]
}

通過循環(huán)求余實(shí)現(xiàn)。進(jìn)制的轉(zhuǎn)換也是這種方式。

for u >= b {
  i--
  a[i] = uint(u)m
  u >>= s
}

上面的代碼實(shí)現(xiàn)了進(jìn)制的轉(zhuǎn)換。而 digits[uint(u)m] 實(shí)現(xiàn)了轉(zhuǎn)換后的結(jié)果再轉(zhuǎn)成字符。

常規(guī)情況

b := uint64(base)
for u >= b {
 i--
 q := u / b
 a[i] = digits[uint(u-q*b)]
 u = q
}
// u  base
i--
a[i] = digits[uint(u)]

依然是循環(huán)求余來實(shí)現(xiàn)。這段代碼更像是給人看的。和上面2的倍數(shù)的進(jìn)制轉(zhuǎn)換的區(qū)別在于,上面的代碼把除法 / 換成了右移( >> ) s 位,把求余 % 換成了邏輯與 操作。

Sprintf 的實(shí)現(xiàn)

switch f := arg.(type) {
  case bool:
    p.fmtBool(f, verb)
  case float32:
    p.fmtFloat(float64(f), 32, verb)
  case float64:
    p.fmtFloat(f, 64, verb)
  case complex64:
    p.fmtComplex(complex128(f), 64, verb)
  case complex128:
    p.fmtComplex(f, 128, verb)
  case int:
    p.fmtInteger(uint64(f), signed, verb)
  ...
}

判斷類型,如果是整數(shù) int 類型,不需要反射,直接計(jì)算。支持的都是基礎(chǔ)類型,其它類型只能通過反射實(shí)現(xiàn)。

Sprintf 支持的進(jìn)制只有10 %d 、16 x 、8 o 、2 b 這四種,其它的會包 fmt: unknown base; can't happen 異常。

switch base {
case 10:
 for u >= 10 {
 i--
 next := u / 10
 buf[i] = byte('0' + u - next*10)
 u = next
 }
case 16:
 for u >= 16 {
 i--
 buf[i] = digits[u0xF]
 u >>= 4
 }
case 8:
 for u >= 8 {
 i--
 buf[i] = byte('0' + u7)
 u >>= 3
 }
case 2:
 for u >= 2 {
 i--
 buf[i] = byte('0' + u1)
 u >>= 1
 }
default:
 panic("fmt: unknown base; can't happen")
}

2、8、16進(jìn)制和之前 FormatInt 差不多,而10進(jìn)制的性能差一些,每次只能處理一位數(shù)字,而不像 FormatInt 一次處理兩位。

性能對比

var smallInt = 35
var bigInt = 999999999999999

func BenchmarkItoa(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := strconv.Itoa(smallInt)
    _ = val
  }
}

func BenchmarkItoaFormatInt(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := strconv.FormatInt(int64(smallInt), 10)
    _ = val
  }
}

func BenchmarkItoaSprintf(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := fmt.Sprintf("%d", smallInt)
    _ = val
  }
}

func BenchmarkItoaBase2Sprintf(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := fmt.Sprintf("%b", smallInt)
    _ = val
  }
}

func BenchmarkItoaBase2FormatInt(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := strconv.FormatInt(int64(smallInt), 2)
    _ = val
  }
}

func BenchmarkItoaBig(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := strconv.Itoa(bigInt)
    _ = val
  }
}

func BenchmarkItoaFormatIntBig(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := strconv.FormatInt(int64(bigInt), 10)
    _ = val
  }
}

func BenchmarkItoaSprintfBig(b *testing.B) {
  for i := 0; i  b.N; i++ {
    val := fmt.Sprintf("%d", bigInt)
    _ = val
  }
}

壓測有三組對比,小于100的情況,大數(shù)字的情況,還有二進(jìn)制的情況。

BenchmarkItoa-8         300000000     4.58 ns/op    0 B/op    0 allocs/op
BenchmarkItoaFormatInt-8     500000000     3.07 ns/op    0 B/op    0 allocs/op
BenchmarkItoaBase2Sprintf-8   20000000     86.4 ns/op    16 B/op    2 allocs/op
BenchmarkItoaBase2FormatInt-8  50000000     30.2 ns/op    8 B/op    1 allocs/op
BenchmarkItoaSprintf-8      20000000     83.5 ns/op    16 B/op    2 allocs/op
BenchmarkItoaBig-8        30000000     44.6 ns/op    16 B/op    1 allocs/op
BenchmarkItoaFormatIntBig-8   30000000     43.9 ns/op    16 B/op    1 allocs/op
BenchmarkItoaSprintfBig-8    20000000    108 ns/op    24 B/op    2 allocs/op
  1. Sprintf 在所有情況中都是最差的,還是別用這個包了。
  2. 小于100的情況會有加速,不光是性能上的加速,因?yàn)榻Y(jié)果是提前算好的,也不需要申請內(nèi)存。
  3. FormatInt 10進(jìn)制性能最好,其它的情況差一個數(shù)量級。
  4. Itoa 雖然只是封裝了 FormatInt ,對于性能還是有一些影響的。

本文涉及的代碼可以從 這里 下載。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang 中獲取字符串個數(shù)的方法
  • 簡單談?wù)凣olang中的字符串與字節(jié)數(shù)組
  • Golang 統(tǒng)計(jì)字符串字?jǐn)?shù)的方法示例
  • Golang中文字符串截取函數(shù)實(shí)現(xiàn)原理
  • Golang實(shí)現(xiàn)字符串倒序的幾種解決方案
  • Golang 語言高效使用字符串的方法

標(biāo)簽:瀘州 滄州 昭通 泰安 東營 駐馬店 晉中 阿壩

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang 中整數(shù)轉(zhuǎn)字符串的方法》,本文關(guān)鍵詞  Golang,中,整數(shù),轉(zhuǎn),字符串,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang 中整數(shù)轉(zhuǎn)字符串的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Golang 中整數(shù)轉(zhuǎn)字符串的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品久久久久久久久久久久冷| 亚洲自拍欧美色图| 麻豆传媒一区| 亚洲人午夜精品天堂一二香蕉| 成年人视频在线观看免费| 蜜臀av一区二区在线观看| 国产91精品久久久久久久网曝门| 不卡区在线中文字幕| 亚洲第一av在线| 成人午夜福利一区二区| 二区三区偷拍浴室洗澡视频| 日本成人三级电影| 91精品美女| 亚洲av少妇一区二区在线观看| 亚洲色婷婷久久精品av蜜桃| 91aaa在线观看| 精品国产精品一区二区夜夜嗨| 一区二区三区福利视频| 欧美一区三区四区| 久久婷婷国产综合尤物精品| 亚洲一区二区三区四区的| 爱情岛亚洲播放路线| 国产午夜三区视频在线| 久久久久久久久久久网| 偷拍一区二区| 99精品一区二区| 中文字幕巨乱亚洲| 99视频精品免费视频| 欧美黑人孕妇孕交| 亚洲免费网址| 在线日本成人| 成年人视频观看| 亚洲成人久久久| 美日韩精品免费视频| 伊人春色在线| 亚洲人成在线观看一区二区| 激情成人在线视频| 免费在线视频一区二区| 国产黄色录像视频| 亚洲成人99| 久久久精品中文字幕麻豆发布| 美女视频免费观看网站在线| 久久精品99久久久久久| av一本久道久久波多野结衣| 亚洲久久久久久久久久| 亚洲欧美日韩成人网| 国产极品美女到高潮| japansex久久高清精品| 日韩一区中文| 26uuu精品一区二区在线观看| 国产精品久久不能| 国产精品三级a三级三级午夜| 久久精品国产一区二区三区日韩| 91精品久久久久久蜜臀| 性欧美16一18| 国产精品国产三级国产专区53| 中文久久电影小说| 精品成人乱色一区二区| 欧美午夜在线观看| 国产a免费视频| 极品美乳网红视频免费在线观看| 精品欧美日韩精品| 在线观看的av| 国产精品资源在线看| 蜜桃视频在线观看免费视频网站www| 777琪琪电影午夜理伦片| 亚洲国产美女久久久久| 一级毛片久久久| 欧美人成在线观看| 欧美大片网址| 女性隐私黄www网站视频| 91手机视频在线观看| 亚洲一区美女| 午夜视频免费播放| 在线看的av| 成人欧美一区二区三区在线播放| 精品国内自产拍在线观看视频| eeuss影院第1页在线| 中文字幕永久有效| 制服丝袜av成人在线看| 精品无码久久久久成人漫画| 亚洲国产精品日韩| 国产麻豆精品高清在线播放| 91美女片黄在线| 色综合天天综合狠狠| 怡红院成永久免费人全部视频| av资源一区| 久久久最新网址| 一区二区三区**美女毛片| 亚洲人成精品久久久久| 亚洲专区在线| 三级a在线观看| 一本在线高清不卡dvd| 日韩激情电影| 欧美日本亚洲视频| 免费观看的av| 国产人妻黑人一区二区三区| 激情视频免费| 四虎精品成人免费观看| 午夜成人亚洲理伦片在线观看| 人人狠狠综合久久亚洲| 欧美被狂躁喷白浆精品| 91免费精品国自产拍在线不卡| 成人免费无码大片a毛片| 久久a爱视频| 26uuu成人| 岛国视频午夜一区免费在线观看| 国产情人节一区| 三级黄色片网站| 黄色三级在线| 国产一级二级三级视频| 和岳每晚弄的高潮嗷嗷叫视频| 嫩草影院一区二区三区| 日本学生初尝黑人巨免费视频| 桃花色综合影院| 欧美激情一区二区三区不卡| 91在线高清观看| 91精品人妻一区二区三区| 激情五月激情综合网| 国产精品久久久久久久久免费高清| 亚洲国产精品久久| 99riav一区二区三区| 一级免费在线观看| 周于希免费高清在线观看| 亚洲图片欧洲图片日韩av| 中文字幕一区二区三区乱码不卡| bbbbbbbbbbb在线视频| 久草福利在线视频| 久久久一本精品99久久精品66| 一个人看的www在线免费视频| 欧美日韩午夜激情| 91成人免费网站| 日韩精品在线一区二区三区| 国产裸体视频网站| 免费精品视频| 成人午夜福利视频| 免费人成网ww777kkk手机| 在线免费三级电影网站| 夜鲁夜鲁夜鲁视频在线播放| www.4hu95.com四虎| 日韩免费视频网站| 在线观看成人网| 亚洲精品视频啊美女在线直播| 伊人久久国产精品| 国产免费无遮挡吸奶头视频| 国产一区二区三区站长工具| 久久国产精品久久精品| 91老司机福利 在线| 久久久99精品免费观看不卡| 亚洲国产精品久久久天堂| av在线天天| www.国产三级| 最新国产在线拍揄自揄视频| 91香蕉视频黄| 国产精品久久网站| 国产偷人爽久久久久久老妇app| 精品在线免费观看视频| 国产又大又长又粗| 国产麻豆精品一区| 亚洲欧美国产一本综合首页| 国产日韩欧美日韩| 免费a在线观看播放| 精品欧美一区免费观看α√| 久久久久高潮毛片免费全部播放| 亚洲激情第一页| 99麻豆久久久国产精品免费| 中文字幕av在线一区二区三区| 狠狠操五月天| 久久成人av| 中文字幕色站| 亚洲欧美日韩精品久久久久| 欧美性资源免费| 中文天堂在线观看| 精品无码国模私拍视频| 国产熟妇搡bbbb搡bbbb| 日韩免费毛片视频| 国产精品综合二区| 日本天码aⅴ片在线电影网站| 国产免费观看久久黄| 欧美视频免费看欧美视频| 一区二区三区四区中文字幕| 国产又粗又猛又爽又黄的网站| 浮生影视网在线观看免费| 99riav视频一区二区| 蜜臀av免费一区二区三区| 韩国欧美一区| 亚洲欧美一区二区三区国产精品| 欧美高清性hdvideosex| 顶臀精品视频www| 午夜精品一区二区三区在线视频| 北条麻妃一区二区三区中文字幕| 夫妇交换中文字幕| 国内视频自拍在线视频| 日韩 欧美 自拍| 欧美重口另类| 天天射天天色天天干| 色综合久久88色综合天天看泰| 欧美xxx视频| 国模套图日韩精品一区二区| 一区二区欧美视频| 98精品国产高清在线xxxx天堂| 日韩av黄色网址| 国产一区二区三区黄网站| 婷婷中文字幕在线观看| 99免费看香蕉视频| 色老头久久综合| 国产精品99久久久久久www| 中文字幕一区二区三区四区久久| 日韩精品免费| 欧美激情 一区| 激情欧美一区二区三区中文字幕| 亚洲一区二区三区四区五区黄| 国产美女裸体无遮挡免费视频| av噜噜在线观看| 亚洲国产成人一区二区| 国产精品久久久久久妇女6080| 潘金莲一级淫片aaaaaaa| 精品卡一卡卡2卡3网站| 天天色天天干天天色| 亚洲特黄一级片| 欧美日韩综合另类| 国产精品偷伦免费视频观看的| 亚洲精品一品区二品区三品区| 国产激情欧美| 乱小说欧美综合| 男人的天堂a在线| 懂色中文一区二区三区在线视频| 奇米精品一区二区三区在线观看| 午夜精品久久久久久久白皮肤| 色综合视频一区中文字幕| 国产大尺度在线观看| 日韩在线观看www| 538在线一区二区精品国产| 久久久九九九热| 欧美性色综合网| av片在线观看免费| 性生活免费网站| 一区二区三区视频在线看| 国产成人亚洲精品无码h在线| 少妇人妻大乳在线视频| 91av视频在线免费观看| 免费高清视频在线观看| 亚洲尤物视频网| 色婷婷综合视频| 首页亚洲欧美制服丝腿| 91一区二区三区在线播放| 亚洲欧美日韩在线播放| 999久久久免费精品国产| 国产精品久久久久久久久免费| 欧美凹凸一区二区三区视频| 日韩最新中文字幕| 久久久久成人精品| 日韩高清欧美激情| 亚洲a成v人在线观看| 黄色大片网站| 国产精品理论片| 一级黄色录像大片| 欧美性videos高清精品| 日韩亚洲欧美成人| 网红女主播少妇精品视频| 国产精品久久久久久久久久久久久久| 在线视频欧美日韩| 中文字幕网站视频在线| 91精品视频免费在线观看| 尤物九九久久国产精品的特点| 亚洲欧美综合乱码精品成人网| 麻豆changesxxx国产| 亚洲丝袜在线视频| 精品国产乱子伦| 久久久久久综合| 国产成人精品三级| 国外成人福利视频| 三上悠亚在线观看| 亚洲性视频网站| 国产精品白浆| 日韩在线精品| 久久这里有精品视频| 综合久久十次| 51国产偷自视频区视频| 福利视频999| 成人aaaa| 午夜激情视频网| 精品国产999久久久免费| 国产一区二区麻豆| 夜夜骚av一区二区三区| 日韩av一区二| 欧美日韩中文字幕日韩欧美| 国产乱妇无码大片在线观看| 亚洲黄色成人久久久| 久久精品国产99久久99久久久| 精品视频自拍| 91在线porny国产在线看| 在线免费观看成人短视频| eeuss草民免费| 在线观看日韩精品视频| 国产日产久久高清欧美一区| 国产精品无码永久免费不卡| 精品在线视频一区| 国产精品三级久久久久三级| 色av中文字幕一区| 欧美日韩国产传媒| 538在线一区二区精品国产| 视频成人永久免费视频| 久久高清精品| 麻豆一区一区三区四区| 日韩欧美一区二区三区免费观看| 欧美日韩激情一区| 中日韩在线视频| 天堂在线中文在线| 久久精品三级| 国产精品一区二区三区四区| 日本三级免费观看| 韩国视频一区二区三区| 亚洲男人天堂2019| 国产精久久久久久| 欧美日韩国产免费一区二区三区| 国产精品白浆流出视频| 大桥未久女教师av一区二区| 日韩不卡av| 久草免费资源| 国精品**一区二区三区在线蜜桃| 99久久99久久免费精品蜜臀| 在线 丝袜 欧美 日韩 制服| 国产精品又粗又长| 国产日本欧美一区二区三区在线| 欧美国产亚洲一区| 亚洲字幕av一区二区三区四区| 欧美成人免费播放|