aardio 文档
aardio 范例: 转换 IP 地址
参考范例 - 二进制打包
import console;
//转换 IP 地址
import raw.pack;
import wsock;
var ipStr = "2.5.29.17"
/*
将域名或 IP 转换为 sockaddr_in,参数 2 可选指定端口
wsock.tcp.client 等所有套接字对象基本都是使用 wsock.sockaddr_in 接收 IP 与端口参数。
*/
var addrIn = wsock.sockaddr_in(ipStr)
//这是 IPv4 结构体
var sinAddr = addrIn.sin_addr
//addrIn 或 sinAddr 都支持用 tostring 转换为字符串格式 IP( "2.5.29.17")
ipStr = tostring(sinAddr)
//转换为数值
ipNum = tonumber(sinAddr)
//转换为 Windows 主机字节序(小端序)
var ipNum2 = raw.swap(ipNum,"INT")
//也可以这样写
ipNum = wsock.aton("2.5.29.17")
//数值 IP 转换为字符串格式 IP( "2.5.29.17")
ipStr = wsock.ntoa(ipNum)
print(ipStr);
//将 IP 结构体转换为二进制字节串(buffer 类型)
var bin1 = raw.buffer(sinAddr)
/*
用搜索映射函数 string.map 将全局匹配结果转换为数组。
参数 2 可指定模式串或逐步匹配的模式串数组(默认为 [ "[-\d]+" ] ),
参数 3 指定转换函数(默认为 tonumber)
*/
var parts = string.map("2.5.29.17");
var bin2 = string.pack(parts);//bin2 是字符串类型,内存数据与 bin1 相同
//也可以使用与 Python struct.pack 兼容的格式字符串打包二进制
var bin3 = raw.pack("<BBBB",parts)
//参考范例 - 二进制打包: https://www.aardio.com/zh-cn/doc/example/aardio/Raw/raw.pack.html
//直接使用结构体
var bin4 = raw.buffer({BYTE bytes[]=parts})
//bin1,bin2,bin3,bin4 的内存数据相同
console.hex(bin1)
console.hex(bin2)
console.hex(bin3)
console.hex(bin4)
console.pause()
Markdown 格式