---
author: 田冬冬
date: 2024-09-12
---

# -b 选项

**-b** 选项用于控制二进制文件的输入/输出格式。

在 {doc}`/table/index` 一章中已经介绍过，表数据可以是ASCII格式、二进制格式
或netCDF格式。ASCII格式很直观，可以直接看到有多少列数据。
而二进制格式的数据，GMT在读入数据时无法数据有多少列，也无法知道每一列的格式。
因而需要使用 **-b** 选项告诉GMT输入或输出数据的具体格式。

**-b** 的语法是：

> **-b**\[**i**|**o**\]\[*ncols*\]\[*type*\]\[**w**\]\[**+l**|**b**\]

**-bi** 表示对输入有效，**-bo** 表示对输出有效。
后面紧跟着指定有 *ncols* 列个 *type* 类型的数据，多个 *ncols* *type* 之间可以
用逗号分隔。**w** 表示对这些列数据强制做字节序转换。
**+l** 或 **+b** 表示整个数据按照little-endian或big-endian字节序读入。

GMT支持的数据类型 *type* 可以取：

- **c**：即 **int8_t**，字符型
- **u**：即 **uint8_t**，无符号字符型
- **h**：即 **int16_t**，两字节有符号整型
- **H**：即 **uint16_t**，两字节无符号整型
- **i**：即 **int32_t**，四字节有符号整型
- **I**：即 **uint32_t**，四字节无符号整型
- **l**：即 **int64_t**，八字节有符号整型
- **L**：即 **uint64_t**，八字节无符号整型
- **f**：四字节单精度浮点型
- **d**：八字节双精度浮点型
- **x**：不代表某种数据类型，表示跳过 *ncols* 个字节

若未指定 *ncols*，则假定 *ncols* 为程序所期望的数据列数，
所有列均为 *type* 所指定的数据类型。

还可以使用 {doc}`/option/h` 跳过二进制文件开头的若干个字节。

举几个例子：

1. **-bi2f,1i** 表示要读入的二进制数据中有3列，前两列是单精度浮点型，
   最后一列为四字节有符号整型
