准备
- 开发语言:GOLANG
- 开发工具:LiteIDE
- 开发环境:Windows
- 运行环境:Linux32
需求
将抓拍机拍摄照片和记录信息json文件合成为一个文件:
1.通过内置Linux系统输入命令行提取参数进行打包;
-i 目标源文件夹 -o 打包程序文件名
2.解析json中数据进行类型转换,重新编码;
3.在pkg中按字节首先存放json数据,再依次存入png文件二进制数据。
功能模块
1.获取命令行指令;
2.解析json中数据,存入结构体;
3.类型和编码转换;
4.pkg数据写入。
流程图
数据结构
结构体
结构体字段 | 作用 |
---|
SnapFileAttrStruct | 存放字节数据 |
device | 设备信息 |
info | 道路信息 |
xSXX | 限速模式 |
record | 记录信息 |
imgDatetime | 图片时间信息 |
函数
函数名称 | 函数参数 | 函数返回值 | 函数用途 |
---|
main | | | |
readConfig | fileName string | v caseJson , err error | 从接送文件中读取数据存入caseJson结构体中 |
stringToUint8 | s string | u uint8 | string类型转换为uint8 |
intToString | i int | s string | int类型转换为string |
memcpy | dst []byte, str string | | string赋值给字节数组 |
memcpyTime | dst []byte, src [8]byte, i int | | 8字节数组赋值给字节数组 |
memcpyByte | dst , src []byte | | 字节数组赋值给字节数组 |
timeTransfer | timestr string | datetime [8]uint8 | 将时间字符串转换为8字节数组-用于图片时间、有效时间 |
copyFile | dest src * os.File , offset int64 | | 将图片二进制数据复制到pkg文件中 |
handleCommandLine | r1 , r2 string | | 获取命令行参数 |
UTF8ToGBK | s []byte | []byte | UTF转换为GBK |
特殊函数
通过首地址指针获取结构体数据
import (
"unsafe"
)
dataBytes := (*[长度]byte)(unsafe.Pointer(&snap))
数组越界异常处理
func memcpyByte( dst , src []byte) {
defer func(){
recover()
}()
size := len(src)
for i := 0 ; i < size ;i++{
dst[i] = src[i]
}
}