如何根据“Endianness”将数据存储在位级别?
发布时间:2020-12-16 10:45:21 所属栏目:百科 来源:网络整理
导读:我读到有关Endianness的信息,并了解蹲… 所以我写了这个 main(){ int k = 0xA5B9BF9F; BYTE *b = (BYTE*)k; //value at *b is 9f b++; //value at *b is BF b++; //value at *b is B9 b++; //value at *b is A5} k等于A5 B9 BF 9F 和(字节)指针“walk”o / p
我读到有关Endianness的信息,并了解蹲…
所以我写了这个 main() { int k = 0xA5B9BF9F; BYTE *b = (BYTE*)&k; //value at *b is 9f b++; //value at *b is BF b++; //value at *b is B9 b++; //value at *b is A5 } k等于A5 B9 BF 9F 和(字节)指针“walk”o / p是9F BF b9 A5 所以我得到它的字节向后存储……好吧. ? 所以现在我想它是如何存储在BIT级别的…… 我的意思是“9f”(1001 1111)存储为“f9”(1111 1001)? 所以我写了这个 int _tmain(int argc,_TCHAR* argv[]) { int k = 0xA5B9BF9F; void *ptr = &k; bool temp= TRUE; cout<<"ready or not here I come n"<<endl; for(int i=0;i<32;i++) { temp = *( (bool*)ptr + i ); if( temp ) cout<<"1 "; if( !temp) cout<<"0 "; if(i==7||i==15||i==23) cout<<" - "; } } 我得到一些随机输出 即使是没有.像“32”我没有任何理智. 为什么? 解决方法
Endianness,正如您在实验中发现的那样,指的是字节存储在对象中的顺序.
比特不会以不同方式存储,它们总是8比特,并且总是“人类可读”(高 – 低). 现在我们已经讨论过你不需要代码……关于你的代码: for(int i=0;i<32;i++) { temp = *( (bool*)ptr + i ); ... } 这不是你认为它正在做的事情.你正在迭代0-32,一个字中的位数 – 很好.但你的临时任务是错的:) 重要的是要注意bool *与int *的大小相同,与BigStruct *的大小相同.同一台机器上的所有指针大小相同 – 32位机器上的32位,64位机器上的64位. ptr i将i字节添加到ptr地址.当我> 3时,你正在读一个全新的词……这可能会导致一个段错误. 你想要使用的是bit-masks.这样的东西应该工作: for (int i = 0; i < 32; i++) { unsigned int mask = 1 << i; bool bit_is_one = static_cast<unsigned int>(ptr) & mask; ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |