Skip to content

二进制数据 $data

最开始我并不打算提供这个数据类的接口,由于文本识别插件需要用到图片数据,考虑之后我觉得 NSData 的形式最为合适,但这是 Objective-C 的数据类型,于是我将其包装了一下,为插件环境提供了一个 $data 类。

$data.fromUTF8(string)

这是一个类方法,通过 UTF-8 字符串生成 $data 对象。例如:

js
var data = $data.fromUTF8('Hello world!');
var data = $data.fromUTF8('Hello world!');

$data.fromHex(string)

这是一个类方法,通过十六进制字符串生成对应的 $data 对象。例如:

js
var data = $data.fromHex('0ABBAFBD');
var data = $data.fromHex('0ABBAFBD');

每两个十六进制字符组成 1 byte 的数据,所以请务必传入偶数个字符,不区分大小写。

$data.fromBase64(string)

这是一个类方法,通过 Base64 字符串生成对应的 $data 对象。例如:

js
var data = $data.fromBase64('SGVsbG8gV29ybGQ=');
var data = $data.fromBase64('SGVsbG8gV29ybGQ=');

$data.fromByteArray(array)

这个是一个类方法,通过字节数组来生秤对应的 $data 对象。例如:

js
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);

$data.fromData(data)

这是一个类方法,通过一个 $data 类型的对象初始化一个新的 $data 类型对象,新生成的对象和之前的对象操作的内存区域不同,数据互不影响。

js
var data1 = $data.fromUTF8('Hello world!');
var data2 = $data.fromData(data1);
var data1 = $data.fromUTF8('Hello world!');
var data2 = $data.fromData(data1);

$data.isData(object)

这是一个类方法,用于判断一个对象是否为 $data 类型

js
var data = $data.fromUTF8('Hello world!');
$data.isData(data); // true

var string = 'Hello world!';
$data.isData(string); // false
var data = $data.fromUTF8('Hello world!');
$data.isData(data); // true

var string = 'Hello world!';
$data.isData(string); // false

data.length

这是一个对象属性,用于获取当前对象的字节数。例如:

js
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.length; // 4
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.length; // 4

data.toUTF8()

这是一个对象方法,将当前对象转换为 UTF-8 字符串。例如:

js
var data = $data.fromUTF8('Hello world!');
data.toUTF8(); // Hello world!
var data = $data.fromUTF8('Hello world!');
data.toUTF8(); // Hello world!

注意,如果该数据本身并不是 UTF-8 格式的,那么将会返回 undefine

data.toHex([useUpper])

这是一个对象方法,将当前对象转换为二进制字符串。有一个 bool 类型的可选参数,用于判断是否使用大写字母,如果不传,默认使用小写。

例如:

js
var data = $data.fromHex('0ABBAFBD');
data.toHex(true); // 0ABBAFBD
var data = $data.fromHex('0ABBAFBD');
data.toHex(true); // 0ABBAFBD

data.toBase64()

这是一个对象方法,将当前对象转换为 Base64 字符串。例如:

js
var data = $data.fromBase64('SGVsbG8gV29ybGQ=');
data.toBase64(); // SGVsbG8gV29ybGQ=
var data = $data.fromBase64('SGVsbG8gV29ybGQ=');
data.toBase64(); // SGVsbG8gV29ybGQ=

data.toByteArray()

这是一个对象方法,将当前数据转换为字节数组。例如:

js
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.toByteArray(); // [10, 11, 12, 255]
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.toByteArray(); // [10, 11, 12, 255]

注意,如果数据量大的时候非常占用内存,如非必要,请勿使用。

data.readUInt8(index)

这是一个对象方法,用于读取某个字节的数据。

参数是一个数字类型,用于指定需要读取的字节下标,范围是 [0, length - 1],如果超出范围会返回 0。

例如:

js
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.readUInt8(2); // 12
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.readUInt8(2); // 12

data.writeUInt8(value, index)

这是一个对象方法,用于重写某个字节的数据。

第一个参数是需要写入的值,范围是 [0, 255]。

第二个参数是需要写入的字节下标,范围是 [0, length - 1],如果超出范围则无效。

例如:

js
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.writeUInt8(0xFF, 0);
data; // [0xFF, 0x0B, 0x0C, 0xFF]
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
data.writeUInt8(0xFF, 0);
data; // [0xFF, 0x0B, 0x0C, 0xFF]

data.subData(start, end)

这是一个对象方法,用于截取一段数据生成一个新的 $data 对象,不会改变当前对象

第一个参数是开始下标,会包括在内,范围 [0, length - 1]。

第二个参数是末尾下标,不会包括在内,范围 [0, length]。

其中末尾下标必须大于开始下标。

例如:

js
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
var subData = data.subData(0, 2);
data; // [0x0A, 0x0B, 0x0C, 0xFF]
subData; // [0x0A, 0x0B]
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
var subData = data.subData(0, 2);
data; // [0x0A, 0x0B, 0x0C, 0xFF]
subData; // [0x0A, 0x0B]

data.appendData(data)

这是一个对象方法,拼接一个 $data 对象的数据到当前对象的末尾,会改变当前对象。例如:

js
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
var data2 = $data.fromByteArray([0xBB, 0xCC]);
data.appendData(data2);
data; // [0x0A, 0x0B, 0x0C, 0xFF, 0xBB, 0xCC]
var data = $data.fromByteArray([0x0A, 0x0B, 0x0C, 0xFF]);
var data2 = $data.fromByteArray([0xBB, 0xCC]);
data.appendData(data2);
data; // [0x0A, 0x0B, 0x0C, 0xFF, 0xBB, 0xCC]