项目中要求做指定数据包的重传,以下代码实现! 每个bit,0表示不请求重传,1表示请求重传,例如100001…..,高1位,表示重新请求第一个包;高6位表示重新请求第六个包 unsigned char mask; unsigned char bitIndex; unsigned char byteIndex; for (i = 0; i < nDataCount; i++) { if (pState[i] == 0) { byteIndex = (unsigned char)i / 8; bitIndex = (unsigned char)i % 8; mask = 1 << ( 7 - bitIndex); szState[byteIndex] |= mask; } } #include <limits.h> /* for CHAR_BIT */ #define BITMASK(b) (1 << ((CHAR_BIT-1) - ((b) % CHAR_BIT))) #define BITSLOT(b) ((b) / CHAR_BIT) #define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b)) #define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b)) //如果你没有<limits.h>, 可以定义CHAR BIT 为8。 unsigned char mask; unsigned char bitIndex; unsigned char byteIndex; int nDataCount; char *pState; char *szState; int i; for (i = 0; i < nDataCount; i++) { if (pState[i] == 0) { BITSET(szState, i); } }