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 格式