如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

贾维德·帕克(Javid Pack)

我的C#代码使用BinaryWriter编写这样的二进制文件:

writer.Write(Encoding.ASCII.GetBytes("MAGIC")); //5 ascii characters
writer.Write(version.ToString()); // could be any System.Version.ToString(): "1.2.3.4" or "1.2" or "1.1.1.11", etc
writer.Write(hash); // byte[20]
writer.Write(signature); // byte[256]
// etc.

在PHP中,我试图阅读它。现在我正在这样做:

$myfile = fopen("private/test.txt", "r+") or die("Unable to open file!");
echo fread($myfile,5); // read/print the magic file identifier

// problem start
$versionLength = ?????;
//problem end

$versionString = fread($myfile,$versionLength);
.....

据我了解,BinaryWriter将为字符串加上LEB128格式的可变大小值如何从二进制文件读取此长度,以便可以读取正确的字符串长度?我想我可以在Google上找到一些东西,然后搜索Stack Overflow,但是我没有运气。我尝试了unpack变量,但没有成功。

贾维德·帕克(Javid Pack)

好吧,我的同事写了一个方法为我做这件事,这里是:

function ReadVarInt($file) {
$val = 0;
$bits = 0;
while ($bits != 35) {
    $n = ord(fread($file, 1));
    if ($n === FALSE) return FALSE;
    $val |= ($n & 0x7F) << $bits;
    $bits += 7;
    if (!($n & 0x80))
        return $val;
}
//error "Too many bytes in what should have been a 7 bit encoded Int32.";
return FALSE;
}

function ReadString($file) {
    $len = ReadVarInt($file);
    if ($len === FALSE) return FALSE;
    if ($len < 0) {
        //error "Negative String Length";
        return FALSE;
    }
    return fread($file, $len);
}

只需这样调用:

$myfile = fopen($filename, "r+") or die("Unable to open file!");
$string = ReadString($myfile);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

来自分类Dev

如何从PHP中的C#BinaryWriter读取二进制流?

来自分类Dev

如何从二进制文件中读取以nul结尾的字符串

来自分类Dev

关闭程序后如何从二进制文件中读取字符串

来自分类Dev

读取二进制文件中的字符串C ++

来自分类Dev

从C中的二进制文件读取字符串时发生访问冲突

来自分类Dev

使用 C# 在文件中存储字符串索引的二进制数据

来自分类Dev

如何将二进制文件的内容放在c中的字符串中?

来自分类Dev

替换二进制文件中的字符串

来自分类Dev

如何从二进制文件读取字符串/数组和int in c?

来自分类Dev

如何从vb.net中的二进制文件读取vb6定长字符串

来自分类Dev

如何从Java中的标准输入读取python二进制字符串

来自分类Dev

如何在 Python 中读取二进制字符串

来自分类Dev

在C#中对数组中的字符串进行二进制搜索

来自分类Dev

在C#中对数组中的字符串进行二进制搜索

来自分类Dev

如何在C ++中十六进制protobuf的二进制字符串?

来自分类Dev

我如何在android中创建增量二进制字符串

来自分类Dev

如何替换二进制文件中的unicode字符串?

来自分类Dev

如何检查二进制文件中是否存在字符串?

来自分类Dev

使用C ++在二进制文件中搜索字符串

来自分类Dev

如何在C#中存储两个二进制字符串并使用OR运算符

来自分类Dev

如何比较PHP中的IP地址和二进制字符串?

来自分类Dev

PHP-如何从二进制字符串到数据库中的Blob?

来自分类Dev

如何从C#中的混合xml /二进制文件的标头读取XML数据

来自分类Dev

如何在C#.NET中UNHEX()MySQL二进制字符串?

来自分类Dev

在C ++中将二进制字符串输出到二进制文件

来自分类Dev

如何从二进制文件读取字符串?

来自分类Dev

如何以1和0的字符串序列读取二进制文件?

来自分类Dev

c ++使用fstream从二进制文件读取字符串

Related 相关文章

  1. 1

    如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

  2. 2

    如何从PHP中的C#BinaryWriter读取二进制流?

  3. 3

    如何从二进制文件中读取以nul结尾的字符串

  4. 4

    关闭程序后如何从二进制文件中读取字符串

  5. 5

    读取二进制文件中的字符串C ++

  6. 6

    从C中的二进制文件读取字符串时发生访问冲突

  7. 7

    使用 C# 在文件中存储字符串索引的二进制数据

  8. 8

    如何将二进制文件的内容放在c中的字符串中?

  9. 9

    替换二进制文件中的字符串

  10. 10

    如何从二进制文件读取字符串/数组和int in c?

  11. 11

    如何从vb.net中的二进制文件读取vb6定长字符串

  12. 12

    如何从Java中的标准输入读取python二进制字符串

  13. 13

    如何在 Python 中读取二进制字符串

  14. 14

    在C#中对数组中的字符串进行二进制搜索

  15. 15

    在C#中对数组中的字符串进行二进制搜索

  16. 16

    如何在C ++中十六进制protobuf的二进制字符串?

  17. 17

    我如何在android中创建增量二进制字符串

  18. 18

    如何替换二进制文件中的unicode字符串?

  19. 19

    如何检查二进制文件中是否存在字符串?

  20. 20

    使用C ++在二进制文件中搜索字符串

  21. 21

    如何在C#中存储两个二进制字符串并使用OR运算符

  22. 22

    如何比较PHP中的IP地址和二进制字符串?

  23. 23

    PHP-如何从二进制字符串到数据库中的Blob?

  24. 24

    如何从C#中的混合xml /二进制文件的标头读取XML数据

  25. 25

    如何在C#.NET中UNHEX()MySQL二进制字符串?

  26. 26

    在C ++中将二进制字符串输出到二进制文件

  27. 27

    如何从二进制文件读取字符串?

  28. 28

    如何以1和0的字符串序列读取二进制文件?

  29. 29

    c ++使用fstream从二进制文件读取字符串

热门标签

归档