请教一个socket通信的数据有关问题

请问一个socket通信的数据问题?
我定义一个数据:
C/C++ code
struct login
{
unsigned char head,
unsigned char name[10],
unsigned char passsword[10],
}

1.如何对上面结构体STRUCT进行crc-32算法
2.如果我把上面crc-32算法保存为unsigned char name[4],是不是应该这么定义通信的数据:
C/C++ code
struct login_ex
{
struct login loginInfo,
unsigned char crc[4]
}
是不是应该这么定义呀?有没有更好的定义方法呀?

------解决方案--------------------
没对齐吧
一般在设计结构时,把校验作为结构的一部分
------解决方案--------------------
一般来说,消息分为头和体,分别计算校验

那如果把验证作为结构的一部分,那我教验什么数据呀?
除去验证的部分
------解决方案--------------------
当通信中有命令和数据传输时,一般定义2种数据格式,并提供2类api

一般的消息头可以是这样:
消息头长度 数据长度
命令类型 参数1 ... 参数n 对齐
校验

数据的长度通常不是固定的,所以要指明数据长度,便于接收以及找到校验码的地址