Преобразование в uint16
Преобразование в тип uint16 используется для получения
16-битного беззнакового целого числа. В качестве исходного
значения может выступать число другого типа, строка или
логическое значение. При преобразовании важно учитывать
диапазон допустимых значений: от 0 до 65535 включительно.
Если исходное значение выходит за этот диапазон, происходит
переполнение (обрезка старших битов).
Преобразование числовых типов
Для преобразования числовых значений используется синтаксис
uint16(x), где x — исходное число. При этом
происходит явное приведение типа. Рассмотрим несколько
примеров:
package main
import "fmt"
func main() {
var a int = 100
var b uint8 = 200
var c float32 = 3.14
res1 := uint16(a)
res2 := uint16(b)
res3 := uint16(c)
fmt.Println(res1)
fmt.Println(res2)
fmt.Println(res3)
}
Результат выполнения кода:
100
200
3
Как видно из примера, дробная часть отсекается при преобразовании из чисел с плавающей точкой.
Преобразование строк
Для преобразования строкового представления числа в
uint16 необходимо использовать функцию
strconv.ParseUint с указанием разрядности 16.
Эта функция возвращает два значения: само число и ошибку.
Обратите внимание, что результат имеет тип uint64,
поэтому его нужно явно привести к uint16:
package main
import (
"fmt"
"strconv"
)
func main() {
str := "12345"
num, err := strconv.ParseUint(str, 10, 16)
if err != nil {
fmt.Println("Error:", err)
return
}
res := uint16(num)
fmt.Println(res)
}
Результат выполнения кода:
12345
Если строка содержит недопустимый символ или число выходит за пределы допустимого диапазона, будет возвращена ошибка:
package main
import (
"fmt"
"strconv"
)
func main() {
str := "abc"
num, err := strconv.ParseUint(str, 10, 16)
if err != nil {
fmt.Println("Error:", err)
return
}
res := uint16(num)
fmt.Println(res)
}
Результат выполнения кода:
"Error: strconv.ParseUint: parsing \"abc\": invalid syntax"
Преобразование логических значений
При преобразовании логического значения true
становится 1, а false — 0. Это может быть
полезно при работе с битовыми флагами:
package main
import "fmt"
func main() {
var flag bool = true
res := uint16(0)
if flag {
res = 1
}
fmt.Println(res)
}
Результат выполнения кода:
1
Особенности при переполнении
Важно помнить, что при преобразовании чисел, выходящих
за пределы диапазона uint16, происходит обрезка
старших битов. В отличие от строкового преобразования,
ошибка не возникает, но теряется точность:
package main
import "fmt"
func main() {
var big uint32 = 70000
res := uint16(big)
fmt.Println(res)
}
Результат выполнения кода:
4464
Как видно, значение 70000 было обрезано до 4464,
так как максимальное значение uint16 — 65535.