标签: bits

在Python中进行位域操作的最佳方法是什么?

我正在通过UDP读取一些MPEG传输流协议,它有一些时髦的位域(例如长度为13).我正在使用"struct"库来进行广泛的解包,但有一种简单的方法可以说"抓住下一个13位"而不必手动调整位操作吗?我想要像C做位字段的方式(不必回复到C).

建议?

python bits udp bit-fields

25
推荐指数
2
解决办法
1万
查看次数

浮点和严格别名

我试图从浮点数中提取位而不调用未定义的行为.这是我的第一次尝试:

unsigned foo(float x)
{
    unsigned* u = (unsigned*)&x;
    return *u;
}
Run Code Online (Sandbox Code Playgroud)

据我了解,由于严格的别名规则,这不能保证工作,对吧?如果使用字符指针进行中间步骤,它是否有效?

unsigned bar(float x)
{
    char* c = (char*)&x;
    unsigned* u = (unsigned*)c;
    return *u;
}
Run Code Online (Sandbox Code Playgroud)

或者我是否必须自己提取单个字节?

unsigned baz(float x)
{
    unsigned char* c = (unsigned char*)&x;
    return c[0] | c[1] << 8 | c[2] << 16 | c[3] << 24;
}
Run Code Online (Sandbox Code Playgroud)

当然,这有一个缺点,取决于字节顺序,但我可以忍受.

工会黑客肯定是未定义的行为,对吧?

unsigned uni(float x)
{
    union { float f; unsigned u; };
    f = x;
    return u;
}
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这里有一个参考版本foo.也是未定义的行为,对吗?

unsigned ref(float x)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point bits strict-aliasing type-punning

22
推荐指数
3
解决办法
2460
查看次数

字节总是8位吗?

当我阅读以下摘录时,我正在研究计算系统的要素:

Hack计算机包括一个黑白屏幕,组织为256行,每行512像素.屏幕内容由8K存储器映射表示,该映射从RAM地址16384(0x400)开始.物理屏幕中的每一行,从屏幕的左上角开始,在RAM中由32个连续的16位字表示.因此,来自顶部的行r和来自左边的列c的像素被映射到位于RAM [16384 + r*32 + c%16]的字的c%16位(从LSB到MSB计数).为了写入或读取物理屏幕的像素,可以在RAM驻留存储器映射中读取或写入相应的位(1 =黑色,0 =白色).

那么,如果屏幕是256行512像素,并且每个像素是一个比特,那么整个屏幕的8K内存映射怎么样?

256行*512位= 131072/8位/字节/ 1024字节/ K = 16K

那不是一张16K的内存映射吗?

我唯一能想到的是因为字大小是16位,这可能是一个因素吗?我一直都知道"字节"意味着8位,但如果它的定义取决于计算机的字大小,那么这对我来说可能会解开这个谜团.有人可以向我解释该段中描述的屏幕是如何用8K内存映射而不是16K表示的吗?

byte bits

19
推荐指数
1
解决办法
3万
查看次数

从一个字节中抓取n位

我从一个字节中抓取n位有点麻烦.

我有一个无符号整数.假设我们的十六进制数是0x2A,十进制是42.在二进制文件中,它看起来像这样:0010 1010.我如何获取前10位是00101,接下来的3位是010,并将它们分成单独的整数?

如果有人能帮助我那将是伟大的!我知道如何从一个字节中提取即可

int x = (number >> (8*n)) & 0xff // n being the # byte
Run Code Online (Sandbox Code Playgroud)

我在另一篇关于堆栈溢出的文章中看到过,但我不确定如何从字节中获取单独的位.如果有人能帮助我,那就太好了!谢谢!

c c++ binary hex bits

19
推荐指数
4
解决办法
5万
查看次数

1 Mbit =?字节

我总是对此感到困惑.是否存在Megabits到字节的"标准"转换?

是吗:

 1 Megabit == 1,000,000 bits == 125,000 bytes
Run Code Online (Sandbox Code Playgroud)

要么:

 1 Megabit == 2^20 bits == 1,048,576 bits == 131,072 bytes
Run Code Online (Sandbox Code Playgroud)

standards bits megabyte

18
推荐指数
1
解决办法
2万
查看次数

如何在Java中反转无符号字节的位?

我正在尝试为非常简单的加密类型编写解码器.通过扫描仪输入0-255的数字,这些位被反转,然后转换为字符并打印.

例如,数字178应转换为字母"M".

178是10110010.

反转所有位应该给出01001101,即77或"M"作为字符.

我遇到的主要问题是,据我所知,Java不支持无符号字节.我可以将值读取为int或short,但由于额外的位,因此在转换期间值将关闭.理想情况下,我可以使用按位补码运算符,但我认为如果我使用带符号数字,我最终会得到负值.关于如何处理这个问题的任何想法?

java unsigned byte bits complement

16
推荐指数
4
解决办法
4万
查看次数

有没有办法通过联合访问各个位?

我正在写一个C程序.我想要一个我可以作为char访问的变量,但我也可以访问特定的位.我以为我可以使用像这样的联盟......

typedef union 
{
    unsigned char status;
    bit bits[8];
}DeviceStatus;
Run Code Online (Sandbox Code Playgroud)

但编译器不喜欢这个.显然你不能在结构中使用位.那么我该怎么做呢?

c bits structure unions

16
推荐指数
2
解决办法
3万
查看次数

位域成员的大小?

有谁知道如何提取位字段成员的大小.下面的代码自然给出了一个整数的大小,但是如何找出有多少位或字节mybits.one?我已经尝试过,sizeof(test.one)但显然无法正常工作.我意识到这是一个衡量标准:

#include <iostream>

using namespace std;

int main()
{
    struct mybits {
        unsigned int one:15;
    };

    mybits test;
    test.one = 455;
    cout << test.one << endl;
    cout << "The size of test.one is:  " << sizeof(test) << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ bits bit-fields

16
推荐指数
2
解决办法
3013
查看次数

如何做两个补码乘法和整数除法?

我已经阅读了关于使用两个补码的二进制乘法的这篇文章.但对我来说不是很清楚.即使我很难理解维基文章.我想知道如何计算负数的乘法:

eg: -1 with -7 should give 7.
A 4-bit, 2's complement of -1 is : 1111
A 4-bit, 2's complement of -7 is : 1001
Run Code Online (Sandbox Code Playgroud)

计算乘法的一些逐步方法将是有帮助的.没有我遇到过关于分裂的文章.怎么解决这个问题?

binary bits multiplication division twos-complement

14
推荐指数
1
解决办法
4万
查看次数

字节流和比特流之间的差异

到目前为止,我认为它们与由字节组成的字节相同,并且双方需要知道另一侧的字节大小和端点并相应地转换流.然而,维基百科说byte stream!= bit stream(https://en.wikipedia.org/wiki/Byte_stream)并且bit streams专门用于视频编码(https://en.wikipedia.org/wiki/Bitstream_format).在这个RFC https://tools.ietf.org/html/rfc107中,他们讨论了这两件事并进行了描述Two separate kinds of inefficiency arose from bit streams..我的问题是:

  • 字节流和比特流之间的真正区别是什么?
  • 比特流如何与字节流不同?接收方如何知道在给定时间要处理多少位?
  • 为什么在某些情况下比特流比字节流更好?

streaming byte bits bytestream

14
推荐指数
2
解决办法
3588
查看次数