010编辑器模板:解析长度为前缀的字符串的7位编码int

时间:2017-08-09 22:02:18

标签: c string data-structures

010 Editor 模板(类似C / C ++的语法)中,我想解析一个用Microsoft .Net的BinaryWriter类编写的字符串,如下所示:

myBinaryWriter.Write("hello");

这会写出一个长度为前缀的字符串,其长度用Write7BitEncodedInt编码。以下是用于写入长度的.Net源代码,供参考:

// Write out an int 7 bits at a time.  The high bit of the byte, 
// when on, tells reader to continue reading more bytes. 
uint v = (uint) value;   // support negative numbers
while (v >= 0x80) { 
    Write((byte) (v | 0x80));
    v >>= 7;
}
Write((byte)v); 

010 Editor模板语法中的struct定义如何解析像这样编码的字符串?

2 个答案:

答案 0 :(得分:1)

这是将.net二进制字符串解析为010编辑器二进制模板的一种粗略方法,它可以处理1和2个字节长的前缀,但是通过循环将其扩展为更长的字符串应该很简单。我以前曾经解析过一个带有硬编码为字符串长度的字节的字符串,但是当我遇到一个长度为128的字符串失败时,但这似乎可行:

typedef struct
{    
    ubyte stringLength;
    local int stringLengthLocal = stringLength;
    if(stringLength > 127)
    {
        stringLengthLocal = (ubyte)stringLength & (ubyte)127;
        ubyte stringLength2;
        stringLengthLocal += stringLength2 * 128;
    }

    char stringValue[stringLengthLocal] <optimize=false>;
} String;

答案 1 :(得分:0)

我认为你需要一个能做两件事的功能:(1)提取内容长度; (2)给你一个指向&#34;真实&#34;内容开始。 请参阅以下代码,该代码应满足以下两个要求:

xsl:sort