diff options
author | Rob Pike <r@golang.org> | 2008-11-03 11:40:33 -0800 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2008-11-03 11:40:33 -0800 |
commit | a5668482cead6041edc29afe4002f55436df10fa (patch) | |
tree | 3ee5e66952020b4b2ef8f59f50681094ec8a9ef3 /src/lib/strings.go | |
parent | 0512e7bc60efcd6309deab33a8b91ab9e430daca (diff) | |
download | golang-a5668482cead6041edc29afe4002f55436df10fa.tar.gz |
ascii to unsigned integer
R=rsc
DELTA=60 (35 added, 17 deleted, 8 changed)
OCL=18339
CL=18343
Diffstat (limited to 'src/lib/strings.go')
-rw-r--r-- | src/lib/strings.go | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/src/lib/strings.go b/src/lib/strings.go index 5f27d42ac..1d7a7cc83 100644 --- a/src/lib/strings.go +++ b/src/lib/strings.go @@ -116,23 +116,9 @@ export func join(a *[]string, sep string) string { return string(b) } -// Convert decimal string to integer. +// Convert decimal string to unsigned integer. // TODO: Doesn't check for overflow. -export func atol(s string) (i int64, ok bool) { - // empty string bad - if len(s) == 0 { - return 0, false - } - - // pick off leading sign - neg := false; - if s[0] == '+' { - s = s[1:len(s)] - } else if s[0] == '-' { - neg = true; - s = s[1:len(s)] - } - +export func atoui64(s string) (i uint64, ok bool) { // empty string bad if len(s) == 0 { return 0, false @@ -149,21 +135,53 @@ export func atol(s string) (i int64, ok bool) { } // parse number - n := int64(0); + n := uint64(0); for i := 0; i < len(s); i++ { if s[i] < '0' || s[i] > '9' { return 0, false } - n = n*10 + int64(s[i] - '0') + n = n*10 + uint64(s[i] - '0') + } + return n, true +} + +// Convert decimal string to integer. +// TODO: Doesn't check for overflow. +export func atoi64(s string) (i int64, ok bool) { + // empty string bad + if len(s) == 0 { + return 0, false } + + // pick off leading sign + neg := false; + if s[0] == '+' { + s = s[1:len(s)] + } else if s[0] == '-' { + neg = true; + s = s[1:len(s)] + } + + var un uint64; + un, ok = atoui64(s); + if !ok { + return 0, false + } + n := int64(un); if neg { n = -n } return n, true } +export func atoui(s string) (i uint, ok bool) { + ii, okok := atoui64(s); + i = uint(ii); + return i, okok +} + export func atoi(s string) (i int, ok bool) { - ii, okok := atol(s); + ii, okok := atoi64(s); i = int(ii); return i, okok } |