2015-11-08 41 views
1

我试图计算一段数据的校验和。正如互联网校验和算法所说的,它首先将段视为一个16位整数序列。我的问题是,如何将char * buff类型的数据分解为16位整数,然后我可以计算总和?将数据段视为C中的16位整数

+0

'正如算法所说的那样':你在使用什么算法,crc函数? –

+0

计算互联网校验和 – coder4lyf

+2

你不需要“分开”,你只需要“解释”。这意味着使用'uint16_t'指针。 –

回答

1

左移位和逐位OR运算符可用于从两个字符创建一个16位整数。从两个随后的字符获得一个16位整数做:

short tmp; 
tmp = arr[i]; 
tmp |= (arr[i + 1] << 8); 

第二行以上拷贝的第一个字符到16位int TMP。下一行将第二个字符复制到tmp的高字节中。

+1

使用'unsigned short'。使用“short”进行隐式转换可能会导致符号扩展问题。 – owacoder

相关问题