Преобразование в uint16

Преобразование в тип uint16 используется для получения 16-битного беззнакового целого числа. В качестве исходного значения может выступать число другого типа, строка или логическое значение. При преобразовании важно учитывать диапазон допустимых значений: от 0 до 65535 включительно. Если исходное значение выходит за этот диапазон, происходит переполнение (обрезка старших битов).

Преобразование числовых типов

Для преобразования числовых значений используется синтаксис uint16(x), где x — исходное число. При этом происходит явное приведение типа. Рассмотрим несколько примеров:

gopackage 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)
}

Результат выполнения кода:

go100
200
3

Как видно из примера, дробная часть отсекается при преобразовании из чисел с плавающей точкой.

Преобразование строк

Для преобразования строкового представления числа в uint16 необходимо использовать функцию strconv.ParseUint с указанием разрядности 16. Эта функция возвращает два значения: само число и ошибку. Обратите внимание, что результат имеет тип uint64, поэтому его нужно явно привести к uint16:

gopackage 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)
}

Результат выполнения кода:

go12345

Если строка содержит недопустимый символ или число выходит за пределы допустимого диапазона, будет возвращена ошибка:

gopackage 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)
}

Результат выполнения кода:

go"Error: strconv.ParseUint: parsing \"abc\": invalid syntax"

Преобразование логических значений

При преобразовании логического значения true становится 1, а false — 0. Это может быть полезно при работе с битовыми флагами:

gopackage main

import "fmt"

func main() {
  var flag bool = true
  res := uint16(0)
  if flag {
    res = 1
  }
  fmt.Println(res)
}

Результат выполнения кода:

go1

Особенности при переполнении

Важно помнить, что при преобразовании чисел, выходящих за пределы диапазона uint16, происходит обрезка старших битов. В отличие от строкового преобразования, ошибка не возникает, но теряется точность:

gopackage main

import "fmt"

func main() {
  var big uint32 = 70000
  res := uint16(big)
  fmt.Println(res)
}

Результат выполнения кода:

go4464

Как видно, значение 70000 было обрезано до 4464, так как максимальное значение uint16 — 65535.

Смотрите также

  • функцию to-uint,
    которая преобразует значение в беззнаковое целое
  • функцию to-uint8,
    которая преобразует значение в 8-битное беззнаковое целое
  • функцию to-uint32,
    которая преобразует значение в 32-битное беззнаковое целое
  • функцию to-uint64,
    которая преобразует значение в 64-битное беззнаковое целое