加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何根据“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;
  ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读