3

8 ビットのバイナリ文字列をバイト (符号なし) に変換してみる

strconv.ParseInt("11111000", 2, 8)

127を返す

strconv.ParseInt("11111000", 2, 16)

正しい数値 248 を返します

ドキュメントによるとParseInt、8 は int8 を表し、-128 から 127 になります。そうであれば、戻り値が負の数にならないのはなぜですか?

4

2 に答える 2

3

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
于 2013-06-23T17:46:53.490 に答える