如何根据“Endianness”将数据存储在位级别?

如何根据“Endianness”将数据存储在位级别?,第1张

概述我读到有关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 a 我读到有关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”我没有任何理智.

为什么?

@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”将数据存储在位级别?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存