uint16_t 和 uint8_t 的等价物是什么

What is the equivalent of uint16_t and uint8_t

OCaml 中 C++ 中 uint16_t 和 uint8_t 的等价物是什么? 我遇到了 Int64 但我不确定它是否已签名。另外我不确定 OCaml 中 C++ 的 uint8_t 等价于什么?

C++的类型是为了匹配常见硬件的各种整数大小。

OCaml 的类型处于更高的水平(或者至少我是这样看的)。所以你不会找到完整范围的 C++ 整数类型。

basic OCaml language definition只提到了这些整数类型:

  • int:一个 31 位有符号值(在 64 位机器上更长;目前 64 位实现定义了 63 位有符号值)

  • char:一个8位无符号值

OCaml language extensions document定义了更多的整数类型:

  • int32: 32 位有符号值

  • int64: 64 位有符号值

  • nativeint :本机字大小的有符号值(32 位机器上为 32 位;64 位机器上为 64 位)

整数类型就这些了!

这是一个显示所有这些类型的值的会话:

$ ocaml
        OCaml version 4.02.1

# 3;;
- : int = 3
# 'z';;
- : char = 'z'
# 3l;;
- : int32 = 3l
# 3L;;
- : int64 = 3L
# 3n;;
- : nativeint = 3n
#

使用更窄的整数值的一个原因是当您有很多整数值时可以节省 space。对于这种情况,有 Bigarray 模块,它支持 8 位和 16 位的有符号和无符号值数组,以及上面列出的整数类型。

uint 库实现了不同的无符号整数类型。如果您需要 C

的行为

uint8_t

只需使用

Uint8.t

来自这个图书馆。