前几天写了一篇 Javascript 的 64bit Int 支持,列举了一些在 Javascript 中支持 64bit 数值的已有方法。

其实,写那篇是为了在 egret 中支持 64bit 数值,原因么,上一篇有讲。

由于 egret 使用的是 TypeScript ,我基于 node-int64 翻译了一个 TypeScript 版本Int64.ts ,方便伸手党。同时为了方便和服务端大爷通信,又继承 egert.ByteArray 写了个 Buffer.ts

note-int64 采用的是 node 的 Buffer 来保存 64bit 数字信息。我给改成了使用 egret.ByteArray 。后来为了更加通用,又改成了直接使用 Array。

Buffer.ts 中则仅仅实现了 readInt64 和 writeInt64,Unsigned 版本直接调用这两个方法。

这两个文件都在 gist 上,请科学上网。

给一段测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var i64:Int64 = new Int64(0x1020304050607);
var buf:Buffer = new Buffer();
buf.writeInt64(i64);
buf.writeUnsignedInt64(i64.toNumber());
buf.position = 0;
for(var i:number=0;i<buf.length;i++)
{
console.log(buf.readByte());
}
buf.position = 0;
console.log(buf.readInt64());
console.log(buf.readUnsignedInt64());
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 283686952306183
// 283686952306183

(全文完)

留言