golang获取packed struct的大小

网络协议里面,很可能遇到自定义的封包,对应到c里面的是


typedef struct _PackageHeader
{
int headerLen;
int timeStamp;
short cmd
};

为了保证单字节对齐,可以加上编译选项

#pragma pack(1)

可惜的是,golang里面,没有这样的编译选项,猥琐的可参考的山寨代码如下


package main

import (
"encoding/binary"
"fmt"
)

type TestStruct struct {
a uint32
b int8
}

func main() {
var testObject TestStruct
size := binary.Size(testObject)

fmt.Println(size)
}

一般拿到buffer以后,buffer[xxx:yyy]获取数据

时间: 2024-10-10 13:49:36

golang获取packed struct的大小的相关文章

GoLang获取struct的tag

GoLang获取struct的tag内容:beego的ORM中也通过tag来定义参数的. 获取tag的内容是利用反射包来实现的.示例代码能清楚的看懂! 1 package main 2 import ( 3 "fmt" 4 "reflect" // 这里引入reflect模块 5 ) 6 type User struct { 7 Name string "user name" //这引号里面的就是tag 8 Passwd string "

[C语言](二)01 获取Windows图形构件大小信息

SYSMETS.c #include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<> //消息循环处理函数,Windows回调函数 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //Windows程序的入口函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIn

获取手机存储空间的大小

获取手机存储空间的大小 by 伍雪颖 @import Darwin.sys.mount; int main(int argc, char * argv[]) { @autoreleasepool { struct statfs buf; long long freespace = 0; if (statfs("/", &buf) >= 0) { freespace = (long long)buf.f_bsize * buf.f_blocks; } if (statfs(

[Android Pro] 关于inputStream.available()方法获取文件的总大小

reference to :http://hold-on.iteye.com/blog/1017449 如果用inputStream对象的available()方法获取流中可读取的数据大小,通常我们调用这个函数是在下载文件或者对文件进行其他处理时获取文件的总大小. 以前在我们初学File和inputStream和outputStream时,有需要将文件从一个文件夹复制到另一个文件夹中,这时候我们用的就是inputStream.available()来获取文件的总大小,而且屡试不爽. 但是当我们要

Pyhon 获取文件夹的大小统计

通过Python 实现文件夹大小的统计:主要是通过了 import os 中的几个方法来实现.         --Zero Python OS 文件/目录方法 首先介绍用到的几个函数,写了一个小demo便于理解. os.getcwd() 返回当前路径. os.listdir (path) 返回当前路径下的文件夹与文件(不向下二级递归). os.path.join() join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. os.path 让join()识别为路径,根据系统自动

Android中Environment与StatFs获取系统/SDCard存储空间大小

近期想起Android开发的知识.好久没有使用了,都忘得几乎相同了,今天查看了一会资料往回捡捡,顺便写下来帮助一下须要的同学. 首先讲述一下Environment与StatFs这两个类,然后介绍它们的具体用法. 1. Environment 类: Environment 是一个提供訪问环境变量的类. Environment 包括常量: MEDIA_BAD_REMOVAL 解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除 MEDIA_CHECKIN

golang json处理struct未导出成员

我们用golang的json来marshal一个结构体的时候,结构体的未导出的成员将无法被json访问,也就是不会出现json编码的结果里(也就是小写的成员没法导出) 这个是由于技术的上问题引起的:golang的结构体里的成员的名字如果以小写字母开头,那么其他的包是无法访问的,也就是json无法访问我们的结构体里小写字母开头的成员 这个可以有两种方法解决 1. struct的成员用大写开头,然后加tag 2. 实现json.Marshaler接口 第一种方法比较常见这儿就不详细展开了 第二种方法

获取iOS文件夹大小

提供一种获取iOS文件夹大小的方法.没有使用对文件夹内的文件枚举与文件大小字节数的累加. NSURL *cacheDirectory = [[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory inDomain:NSUserDomainMaskappropriateForURL:nil create:NO error:nil]; NSDictionary *attributes = [[NSFileManager def

android获取有效可用存储空间大小

/** * 获取有效可用空间大小,单位byte * @param path * @return */ @SuppressLint("NewApi") private long getAvailableBytesByPath(String path) { long size = 0; mStatFs.restat(path); if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2) { size = mStatFs.getAvail