2015-05-18 18 views
8

Tôi đang cố phân tích chuỗi thành số nguyên trong go-lang. Vấn đề tôi thấy với nó là trong tài liệu cú pháp nêu của nó là như sau:Golang chuyển đổi chuỗi thành loại cụ thể của int (int8, int16, int32, int64)

ParseInt(s string, base int, bitSize int) 

nơi, s là chuỗi để được phân tích, base được ngụ ý bởi tiền tố của chuỗi: cơ sở 16 cho "0x", cơ sở 8 cho "0" và 10 cơ sở khác.

Thông số bitSize là nơi tôi đang gặp sự cố. Theo tài liệu của ParseInt, nó chỉ định loại số nguyên mà kết quả phải phù hợp. Kích thước bit 0, 8, 16, 32 và 64 tương ứng với int, int8, int16, int32 và int64.

Nhưng đối với tất cả các giá trị như 0,8,16,32 & 64. Tôi nhận được cùng một giá trị trả về kiểu. tức là loại int64.

Bất cứ ai có thể chỉ cho tôi biết tôi đang thiếu gì.

Code: https://play.golang.org/p/F3LbUh_maY

Trả lời

15

Theo documentation

func parseInt (s chuỗi, cơ sở int, bitSize int) (i Int64, sai lầm lỗi)

parseInt luôn return int64 không có vấn đề gì. Hơn nữa

Đối số bitSize xác định kiểu dữ liệu integer rằng kết quả phải phù hợp với

Vì vậy, về cơ bản các tham số bitSize của bạn chỉ nói rằng chuỗi giá trị mà bạn đang đi để phân tích nên phù hợp với những bitSize sau phân tích cú pháp. Nếu không, ngoài phạm vi sẽ xảy ra.

Giống như trong này PlayGround: strconv.ParseInt("192", 10, 8) (như bạn thấy được giá trị sau khi phân tích cú pháp sẽ là lớn hơn giá trị tối đa của int8).

Nếu bạn muốn phân tích nó để bất cứ điều gì giá trị mà bạn cần, chỉ cần sử dụng int8(i) sau đó (int8, int16, int32).

P.S. vì bạn đã chạm vào chủ đề cách chuyển đổi thành intX cụ thể, tôi sẽ phác thảo rằng nó cũng có thể chuyển đổi thành unsigned int.

8

ParseInt luôn trả về một int64, và bạn cần phải chuyển đổi kết quả để loại mong muốn của bạn. Khi bạn vượt qua 32 làm đối số thứ ba, sau đó bạn sẽ nhận được lỗi phân tích cú pháp nếu giá trị được phân tích cú pháp sẽ không vừa với số int32, nhưng loại trả lại luôn là int64.

Ví dụ:

i, err := strconv.ParseInt("9207", 10, 32) 
if err != nil { 
    panic(err) 
} 
result := int32(i) 
fmt.Printf("Parsed int is %d\n", result) 
Các vấn đề liên quan