Javascript 字节数组与Number类型的转化

本文介绍了JavaScript在浏览器端和Node.js环境中,如何进行Number类型与字节数组之间的转化,这对于使用WebSocket进行字节流通讯至关重要。

自从Node的兴起与火热, Javascript再次成为一门流行语言。 不仅能在浏览器的Web端使用, 还可以向Java\C++等语言一样运行在服务器端(Nodejs)

既然Javascript如此的热, 那自然避免不了与底层的通讯打交道。普通的Web页面通讯是基于HTTP的文本通讯, 基本都是使用字符串。但自从有了Websocket, 通讯的方式就可以基于字节流了,那我们当然需要一些基本的数据类型与字节数组的转化

1. 浏览器端

  • Numer 转化为字节数组
// int8, uint8 --> bytes
let i8a = 0x56, u8a = 0xfc
let bytes_i8a = new Int8Array([i8a]).buffer
let bytes_u8a = new Uint8Array([u8a]).buffer
// int16, uint16 --> bytes
let i16a = 0x55aa, u16a = 0xF5F0
let bytes_i16a = new Int16Array([i16a]).buffer
let bytes_u16a = new Uint16Array([u16a]).buffer
// int32, uint32 --> bytes
let i32a = 0x55aa55aa, u32a = 0xF5F0F1F2
let bytes_i32a = new Int32Array([i32a]).buffer
let bytes_u32a = new Uint32Array([u32a]).buffer
// int64, uint64 --> bytes
let i64a = 0x1122334455667788, u64a = 0xF1F2F3F4F5F6F7F0
let bytes_i64a = new Int64Array([i64a]).buffer
let bytes_u64a = new Uint64Array([u64a]).buffer

// float, double --> bytes
let f32 = 0.1234, f64 = 0.9876543
let bytes_f32 = new Float32Array([f32]).buffer
let bytes_f64 = new Float64Array([f64]).buffer
  • 字节数组转化为Number
// let buffer = new Uint8Array([...]).buffer
// X 表示Number的具体类型, 
// 如 Int8, Uint8, Int16, Uint16, Int32, Uint32, Int64, Uint64, Float32, Float64
// let number = new Xarray(buffer)[0] 
// 比如:

let buffer = new Uint8Array([65, 66, 67, 68]).buffer
let number = new Uint32Array(buffer)[0]
// 1145258561

2. 后端Node

  • Number 转 字节数组
// let buffer = new Buffer(size) /// size为number类型所占字节数
// buffer.writeXLE(number) /// 小端顺序写入, X为Number类型
// buffer.writeXBE(number) /// 小端顺序写入, X为Number类型
// 比如:

let number = 3.1415926 // PI
let buffer = Buffer.alloc(8) // double 类型占8字节
buffer.writeDoubleLE(number) // 小端顺序写入number

  • 字节数组转 Number
// let buffer = new Buffer([...])
// let number = buffer.readXLE(0) // 小端顺序读取
// let number = buffer.readXBE(0) // 大端顺序读取
// 如:
let buffer = Buffer.from([0, 0, 0, 1])
let number = buffer.readUInt32LE(0)
// 1677216
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值