所以我写了这个
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”我没有任何理智.
为什么?
@R_502_6120@ @L_403_0@,正如您在实验中发现的那样,指的是字节存储在对象中的顺序.比特不会以不同方式存储,它们总是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; ...}总结
以上是内存溢出为你收集整理的如何根据“Endianness”将数据存储在位级别?全部内容,希望文章能够帮你解决如何根据“Endianness”将数据存储在位级别?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)