> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/stdlib/a64l.3.md).

# a64l(3)

`a64l` — 在 `long` 整数和 base-64 ASCII 字符串之间进行转换

## 名称

`a64l`, `l64a`, `l64a_r`

## 库

Lb libc

## 概要

`#include <stdlib.h>`

```c
long
a64l(const char *s);

char *
l64a(long int l);

int
l64a_r(long int l, char *buffer, int buflen);
```

## 描述

这些函数用于维护以 radix-64 ASCII 字符存储的数字。这是一种用至多六个字符表示 32 位整数的记法；每个字符表示 radix-64 记法中的一个数位。若 `long` 类型包含多于 32 位，这些操作仅使用低 32 位。

用于表示“数字”的字符为：`.` 表示 0，`/` 表示 1，`0` - `9` 表示 2 - 11，`A` - `Z` 表示 12 - 37，`a` - `z` 表示 38 - 63。

`a64l` 函数接受一个指向 radix-64 表示的指针（其中第一个数字是最低有效位），并返回对应的 `long` 值。若 `s` 所指字符串包含多于六个字符，`a64l` 使用前六个。若字符串的前六个字符中包含空终止符，`a64l` 仅使用空终止符之前的字符。`a64l` 函数从左到右扫描字符串（最低有效位在左），将每个字符解码为 6 位 radix-64 数值。若 `long` 类型包含多于 32 位，结果值进行符号扩展。若 `s` 是空指针或 `s` 所指字符串并非由先前调用 `l64a` 生成，`a64l` 的行为是未指定的。

`l64a` 函数接受一个 `long` 参数，返回指向对应 radix-64 表示的指针。若值为负，`l64a` 的行为是未指定的。

`l64a` 返回的值是指向静态缓冲区的指针。后续对 `l64a` 的调用可能覆盖该缓冲区。

`l64a_r` 函数执行的转换与 `l64a` 相同，并将结果表示存储在 `buffer` 所指向的内存区域中，至多消耗 `buflen` 个字符（包括终止的 `NUL` 字符）。

## 返回值

成功完成时，`a64l` 返回由输入字符串转换得到的 `long` 值。若 `s` 所指字符串为空字符串，`a64l` 返回 0。

`l64a` 函数返回指向 radix-64 表示的指针。若值为 0，`l64a` 返回指向空字符串的指针。

## 参见

[strtoul(3)](/stdlib/strtoul.3.md)

## 历史

`a64l`、`l64a` 和 `l64a_r` 函数派生自 NetBSD（经修改）。它们首次出现于 FreeBSD 6.1。

## 作者

`a64l`、`l64a` 和 `l64a_r` 函数由 Tom Rhodes <trhodes@FreeBSD.org> 添加到 FreeBSD。本手册页的绝大部分内容来自 POSIX 标准。
