数据类型转u8_t-u16_t解决办法

数据类型转u8_t----u16_t
uip_buf[]的定义是这样的 :u8_t Uip_buf[ ]  (是8位的)
在进行TCP校验和计算的时候是:将TCP首部以及数据都划分成16位的一个个16进制数再进行的。
当进行TCP校验和计算的时候代码中现将 uip_buf 类型转换为 u16_t;
这样子 uip_buf的高8位不是就是0了?那么uip_buf中的数据如果原来是:01 02 03 01 04 05 那么现在的存储格式应该变为了:0001 0002 0003 0001 0004 0005了,如果按照下面的校验和计算不是只计算了0、2、4、三个数据而把1、3、5、数据给漏掉了?
本来按照校验和的计算应该是将数据组合成 : 0102 0301 0405 这样子进行的,按照这个程序有点乱了····我不懂了现在啊·············
/***************************************************************/
/* Compute the checksum of the TCP header. */
  hsum = uip_chksum((u16_t *)&uip_buf[20 + UIP_LLH_LEN], 20);
/***************************************************************/
复制代码
/***************************************************************/
u16_t uip_chksum(u16_t *sdata, u16_t len)
{
  u16_t acc;
  
  for(acc = 0; len > 1; len -= 2) {
    acc += *sdata;
    if(acc < *sdata) {
      /* Overflow, so we add the carry to acc (i.e., increase by
         one). */
      ++acc;
    }
    ++sdata;
  }

  /* add up any odd byte */
  if(len == 1) {
    acc += htons(((u16_t)(*(u8_t *)sdata)) << 8);
    if(acc < htons(((u16_t)(*(u8_t *)sdata)) << 8)) {
      ++acc;
    }
  }

  return acc;
}
/*-----------------------------------------------*/
/***************************************************************/
望高人指点啊~~~~

------解决方案--------------------
参考:
http://blog.csdn.net/baijiaheizhiganmao/article/details/7889316
------解决方案--------------------
是按照 0x0201 0x0103 0x0504 这样加的,函数还有对奇数长度进行处理。