PHP关于获取二进制数据流转换为文件的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP关于获取二进制数据流转换为文件的方法相关的知识,希望对你有一定的参考价值。

对方通过POST传送过来一个JSON格式的数组,数组内容为一个文件的二进制数据流,我获取到后该怎么解析成为一个文件并保存到目标路径呢

参考技术A <?php
$bin= bstr2bin($json);
file_put_contents('../somefold/',$bin);

function bstr2bin($input)
// Binary representation of a binary-string
if (!is_string($input)) return null; // Sanity check
// Unpack as a hexadecimal string
$value = unpack('H*', $input);

// Output binary representation
$value = str_split($value[1], 1);
$bin = '';
foreach ($value as $v)
$b = str_pad(base_convert($v, 16, 2), 4, '0', STR_PAD_LEFT);

$bin .= $b;


return $bin;
参考技术B file_put_contents此函数可以安全用于二进制对象本回答被提问者采纳

如何在c中获取文件长度?

【中文标题】如何在c中获取文件长度?【英文标题】:How to get a file length in c? 【发布时间】:2009-11-03 19:40:27 【问题描述】:

我只是有一个关于如何获取包含十六进制数字的文件长度的快速问题。 例如:

724627916C

我能想到的唯一方法是将十六进制值转换为二进制:

724627916C => 0111001001000110001001111001000101101100

然后计算二进制值的位数。 只是想知道这是否是正确的方法?谢谢

【问题讨论】:

复制:***.com/questions/238603/… 也许您想知道文件的奇偶性,而不是长度? @jheddings:问题标题重复 - 但问题与标题不匹配。 @unknown:你在问什么;一点都不清楚。 谢谢,我现在才意识到,实际上,我必须处理两种类型的文件类型 1:文件包含十六进制值。类型 2:文件包含一系列字符。对于 Type 1 文件,我需要将 Hex 值转换为字符,然后计算转换后的字符序列的长度,而不是简单地获取文件的长度。而且我不需要更改类型 2 文件的任何内容。由于这两种文件类型的混淆,我不断得到意想不到的结果。不管怎样,问题已经解决了。谢谢。 How do you determine the size of a file in C?的可能重复 【参考方案1】:

不, 这不是正确的方法。

FILE *fp = fopen("filename", "rb");
fseek(fp, 0, SEEK_END);
int lengthOfFile = ftell(fp);
fclose(fp);

原则上:打开一个文件,寻找到最后并检索您当前的位置。你会得到文件中的字节数。

编辑:您的问题有点不清楚。您要检索文件中的字节数,还是文件中十六进制字符串表示的字节数?如果是后者,并且您的文件中没有任何空格,只需将上述方法返回的字节数除以 2。

【讨论】:

谢谢,实际上,我需要检索文件中的字节数(或位数),包括空格。 1) fseek() spec.: --> “二进制流不需要有意义地支持 wherece 值为 SEEK_END 的 fseek 调用。” 2)ftell() 返回一个long【参考方案2】:

在类似 un*x 的操作系统中,stat 可用于此目的。

【讨论】:

【参考方案3】:

请尝试this answer 寻求帮助。如果这不起作用,Google 有大量关于确定 C 文件大小的信息。

【讨论】:

【参考方案4】:

如果您想计算位数,设置一个数组会更简单,该数组告诉您在每个十六进制数字中设置了多少位(由字符代码索引),然后将它们相加而不显式转换为二进制。

假设 C99:

static bits_map[256] =

    ['0'] = 0, ['1'] = 1, ['2'] = 1, ['3'] = 2,
    ['4'] = 1, ['5'] = 2, ['6'] = 2, ['7'] = 3,
    ['8'] = 1, ['9'] = 2,
    ['a'] = 2, ['b'] = 3, ['c'] = 2, ['d'] = 3,
    ['e'] = 3, ['f'] = 4,
    ['A'] = 2, ['B'] = 3, ['C'] = 2, ['D'] = 3,
    ['E'] = 3, ['F'] = 4,
;

size_t n_bits = 0;
int c;
while ((c = getchar()) != EOF)
    n_bits += bits_map[c];

printf("Number of bits set: %zd\n", n_bits);

【讨论】:

【参考方案5】:

C中的文件长度使用函数_filelength()

#include <io.h>

int fn, fileSize;
FILE * f = fopen(&String, "rb");
if (f)

  fn = _fileno(f);
  fileSize = _filelength(fn);

fclose(f);

【讨论】:

以上是关于PHP关于获取二进制数据流转换为文件的方法的主要内容,如果未能解决你的问题,请参考以下文章

怎样在PHP中把16进制HEX数据转换为2进制数据呢?

PHP如何将从二进制文件中读取的字节转换为数字

php的进制转换

JAVA如何将二进制数转换成文件?

1112 进制数转换

将文件转换为二进制(11111111110)然后执行反向路径以获取图像