标签: 7-bit

以C-BinaryReader.ReadString的7位格式编码整数

C#BinaryReader具有这样的功能,根据MSDN,读取编码为'7个整数’的整数,并且然后读出与该整数的长度的字符串.

是否有一个明确的七位整数格式文档(我粗略地了解MSB或LSB标记是否有更多字节要读取,其余位是数据,但我会很高兴更精确的东西).

更好的是,是否有C以这种格式读写数字的实现?

.net c# binary serialization 7-bit

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

将 8 位数据作为 7 位数据进行访问

我有一个 100 的数组uint8_t,它被视为 800 位的流,并且一次处理 7 位。换句话说,如果 8 位数组的第一个元素成立0b11001100,第二个元素成立ob11110000,那么当我以 7 位格式读取它时,7 位数组的第一个元素将是0b1100110,第二个元素将0b0111100是其余 2 位保存在第 3 位中。我尝试的第一件事是工会...

struct uint7_t {
    uint8_t i1:7;
};

union uint7_8_t {
    uint8_t u8[100];
    uint7_t u7[115];
};
Run Code Online (Sandbox Code Playgroud)

但当然,所有内容都是字节对齐的,我本质上最终只是丢失了每个元素的第 8 位。

有谁知道我该怎么做?

需要明确的是,这是联合结果的视觉表示:

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx8 位数据的 32 位
0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx7 位数据的 32 位。

这代表了我想做的事情:

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx8 位数据的 32 位
xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxx7 位数据的 32 位。

我知道最后的位可能会被填充,但这没关系,我只是想以某种方式一次访问每个字节 …

c++ arrays 7-bit unions 8-bit

5
推荐指数
1
解决办法
3761
查看次数

在文本模式下打开文件可能会导致Python中的数据丢失:为什么?

codecs.open()提到的文件

即使未指定二进制模式,文件也始终以二进制模式打开.这样做是为了避免因使用8位值进行编码而导致数据丢失.

如何在文件中使用文本模式导致"数据丢失"?听起来像在文本模式下打开文件可能会将字节截断为7位,但我在文档中找不到任何提及:文本模式仅被描述为转换换行符的方式,没有提及某些潜在的数据失利.那么,文档的内容codecs.open()是什么?

PS:虽然可以理解的是,依赖于平台的换行编码的自动换行需要一些小心,但问题是关于8位编码的具体内容.我猜想只有一些编码与自动换行转换兼容,无论它们是8位编码还是7位编码.那么,为什么在codecs.open()文档中挑出8位编码呢?

python 7-bit codec 8-bit

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

如何正确地将十进制MIDI弯音值分成2个分开的7位值?

我正在尝试制作一种自定义midi播放器,为此我使用的数组已经正确记住了midi消息数据,如下所示:

int array[3000][4]={{time,status,data1,data2},{...},...}
Run Code Online (Sandbox Code Playgroud)

当我希望我的程序发送midi消息(以便可以播放)时,我调用此数组并在noteon/off,pitch-bend等之间进行必要的区分.弯音值(范围从0到16383,但通常约为8192,这意味着没有音调移位)全部存储在data1(array [i] [2])中.对于从int转换为两个7位值以传递给midiOutShortMsg(),我使用了一些我在这里找到的代码.这是我实际使用的代码:

union { unsigned long word; unsigned char data[4]; } message;
int main(int argc, char** argv) {
    int midiport; // select which MIDI output port to open
    uint16_t bend;
    int flag,u;    // monitor the status of returning functions
    uint16_t mask = 0x007F;
    HMIDIOUT device;    // MIDI device interface for sending MIDI output
    message.data[0] = 0x90;  
    message.data[1] = 60;    
    message.data[2] = 100;   
    message.data[3] = 0;     // Unused parameter


// Assign the MIDI output port …
Run Code Online (Sandbox Code Playgroud)

c int midi 7-bit

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

需要帮助使用Read7BitEncodedInt

我一直在寻找2小时或更好的方法来使用Read7BitEncodedInt方法.我需要以某种方式使用它来减少我的文件大小(在这种情况下可能减少100mb或更多).我也在考虑使用ReadString方法,因为它似乎做了大致相同的事情.但这似乎不太合适,我不确定它会起作用.如果还有其他替代方案,我不知道我也愿意使用它.

总结.如何将Read7BitEncodedInt方法实现为以下代码?另外,我不太确定我的Write7BitEncodedInt方法也是正确的.

    public void SaveFile()
    {
        using (FileStream stream = new FileStream("C:\\A_random.txt", FileMode.Create))
        {
            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                for (int i = 0; i < typeCount.Count; i++)
                {
                    writer.Write((byte)typeCount[i]);
                    writer.Write(type[i]);
                }
                writer.Close();
            }
        }
        LoadFile();
    }

    public void LoadFile()
    {
        using (FileStream stream = new FileStream("C:\\A_random.txt", FileMode.Open))
        {
            using (BinaryReader reader = new BinaryReader(stream))
            {
                int i = 0;
                while (stream.Position != stream.Length)
                {
                    int count = reader.Read7BitEncodedInt();
                    byte val = reader.ReadByte();
                    for (int ii = 0; …
Run Code Online (Sandbox Code Playgroud)

.net c# binary 7-bit binarywriter

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

标签 统计

7-bit ×5

.net ×2

8-bit ×2

binary ×2

c# ×2

arrays ×1

binarywriter ×1

c ×1

c++ ×1

codec ×1

int ×1

midi ×1

python ×1

serialization ×1

unions ×1