給定二進制的71744474
十進制,它是0100010001101011101111011010
我試圖從這個十進制中提取的是從低位開始的每七位。七位中的每一位都表示可打印的ASCII字符,只能有7位。總共我拉出四個字符。第一個字符是1011010
,它是ASCII碼爲Z
。下一個字符是w
依此類推。我想有一種方法可以掩蓋我關心一些事情的方式。屏蔽c中的不需要的位
4
A
回答
7
使用位運算符:
0100010001101011101111011010 & 0000000000000000000001111111 = 1011010
要獲得第二個字符,做
0100010001101011101111011010 & 0000000000000011111110000000
等..沿着這個線路
+1
但是,你如何在for循環中做到這一點,並保持掩碼移動來揭示新的位,並且你怎樣在每個時間掩蓋不同數量的位? – MarcusJ 2015-05-25 00:02:44
3
的東西應該足夠了:
#include <stdio.h>
int main (void) {
unsigned int value = 71184592; // Secret key :-)
for (unsigned int shift = 0; shift < 28; shift += 7)
printf ("%c", (value >> shift) & 0x7f);
putchar ('\n');
return 0;
}
It使用位移將所需的特定位轉換爲值的最低有效位7位,並使用位掩碼清除所有其他位。
如果您運行的代碼,你會看到它可以很愉快地提取單個ASCII字符中的每一個七位組:
Pax!
2
int myN = 71744474;
int mask = 0x7F7F7F7F; // 7F is 0111 1111, or 7 on bits.
int result = myN & mask;
char myBytes[4];
myBytes[0] = (char)((result & 0x000000FF);
myBytes[1] = (char)((result >> 8) & 0x000000FF);
myBytes[2] = (char)((result >> 16) & 0x000000FF);
myBytes[3] = (char)((result >> 24) & 0x000000FF);
// Now, examine myBytes[0-3], and I think they'll be what you want.
0
#include <stdio.h>
int main()
{
int a = 71744474;
a = a&0xFFFFFFF; // 1111111 1111111 1111111 1111111
while (a>0) {
char b = a&0x7f; // 1111111
printf("%c", b);
a = a>>7;
}
}
相關問題
- 1. 基數排序C++不屏蔽位
- 2. 位屏蔽IntPtr
- 3. 屏蔽R中最高位的位?
- 4. 位屏蔽混亂
- 5. 位屏蔽位寄存器
- 6. 位屏蔽和分離在c
- 7. 需要屏蔽SQL中的加密字段
- 8. 屏蔽C中的位返回意外的結果
- 9. 數組中的元素被屏蔽或不屏蔽
- 10. 密碼屏蔽不會在需要時終止程序
- 11. 我如何屏蔽位?
- 12. 使用PN532教程的Arduino NFC屏蔽需要
- 13. ImageMagick的屏蔽
- 14. TreePanel中屏蔽
- 15. C#屏蔽文本框
- 16. 如何移位和屏蔽Lua中的整數位?
- 17. R中的屏蔽函數
- 18. Android中的屏蔽流
- 19. 設定屏蔽%的
- 20. MVC5 Bootstrap:密碼字段問題(只需要屏蔽)
- 21. 屏蔽文本框 - 隱藏屏蔽
- 22. 是否可以使用不同的佔位符屏蔽輸入?
- 23. 數據屏蔽 - 地理定位
- 24. 位屏蔽異或邏輯代碼
- 25. `numpy.mean`:不與屏蔽數組
- 26. Arduino WiFi屏蔽不通信
- 27. Android中的EditText中的屏蔽輸入
- 28. 計算機屏蔽CORS選項要求
- 29. 要求輸入在屏蔽文本框
- 30. Arduino的GSM屏蔽,GSM不初始
在辦理位。你應該以十六進制值爲例。所以它會非常容易理解。 – kapilddit 2012-10-16 14:20:11