日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从一个数组中提取出第start位到第end位

發布時間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从一个数组中提取出第start位到第end位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設通過數組in來表示一個很大的數(in[0]表示最低bit),提取該數的第start位到第end位(計數起始位為0):

1 #define MAX_BYTE_LEN ( 48 ) 2 int getDataFromBitStartToEnd(unsigned char *in, unsigned char *out, int start, int end) 3 { 4 int i, cnt; 5 unsigned char mask[MAX_BYTE_LEN]; 6 // 清除第n位之前的位 7 unsigned char xx[8] = {0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe}; 8 // 清除第n位后面的位 9 unsigned char yy[8] = {0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00}; 10 int byte_start, byte_end; 11 12 memset(mask, 0x00, sizeof(mask)); 13 14 #if 0 // 這種計算方法在兩字節(如:bit15~bit16)的邊界就會出現錯誤 15 cnt = end - start + 1; // 位總數 16 cnt = (cnt + 7) / 8; // 字節總數 17 for(i = 0; i < cnt; i++) 18 { 19 mask[start/8+i] = 0xff; 20 } 21 #endif 22 23 byte_start = start / 8; 24 byte_end = end / 8; 25 for(i = byte_start; i <= byte_end; i++) 26 { 27 mask[i] = 0xff; 28 } 29 30 31 // 前面mask的位可能會把"start之前"/"end之后"的一些位也mask上了 32 mask[start/8] &= ~xx[start%8]; // 清除起始之前多余的bit 33 mask[ end/8] &= ~yy[ end%8]; // 清除結束之后多余的bit 34 35 for(i = 0; i < MAX_BYTE_LEN; i++) 36 { 37 out[i] = in[i] & mask[i]; 38 } 39 40 return 0; 41 }

?

轉載于:https://www.cnblogs.com/utank/p/5570620.html

總結

以上是生活随笔為你收集整理的从一个数组中提取出第start位到第end位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。