在 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定义如何解析像这样编码的字符串?
答案 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