8 ビットのバイナリ文字列をバイト (符号なし) に変換してみる
strconv.ParseInt("11111000", 2, 8)
127を返す
strconv.ParseInt("11111000", 2, 16)
正しい数値 248 を返します
ドキュメントによるとParseInt
、8 は int8 を表し、-128 から 127 になります。そうであれば、戻り値が負の数にならないのはなぜですか?
8 ビットのバイナリ文字列をバイト (符号なし) に変換してみる
strconv.ParseInt("11111000", 2, 8)
127を返す
strconv.ParseInt("11111000", 2, 16)
正しい数値 248 を返します
ドキュメントによるとParseInt
、8 は int8 を表し、-128 から 127 になります。そうであれば、戻り値が負の数にならないのはなぜですか?
You parse positive signed integers, negative signed integers are prefixed with a minus sign. For unsigned integers, parse as unsigned. Also, always check for errors.
For example,
package main
import (
"fmt"
"strconv"
)
func main() {
// +127
i, err := strconv.ParseInt("01111111", 2, 8)
if err != nil {
fmt.Println(err)
}
fmt.Println(i)
// -128
i, err = strconv.ParseInt("-10000000", 2, 8)
if err != nil {
fmt.Println(err)
}
fmt.Println(i)
// +248 out of range for int8
i, err = strconv.ParseInt("11111000", 2, 8)
if err != nil {
fmt.Println(err)
}
fmt.Println(i)
// unsigned 248 in range for uint8 (byte)
u, err := strconv.ParseUint("11111000", 2, 8)
if err != nil {
fmt.Println(err)
}
fmt.Println(u)
}
Output:
127
-128
strconv.ParseInt: parsing "11111000": value out of range
127
248