【问题标题】:Objective C uint8_t PHP equivalentObjective C uint8_t PHP 等价物
【发布时间】:2021-08-09 09:27:30
【问题描述】:

我正在将PHP 脚本中的小Objective C 代码转换为将整数数组转换为二进制文件。

目标 C 代码

typedef struct {
    uint8_t fj1;
    uint8_t fj2;
    uint8_t sr1;
    uint8_t sr2;
    uint8_t zh1;
    uint8_t zh2;
    uint8_t as1;
    uint8_t as2;
    uint8_t mg1;
    uint8_t mg2;
    uint8_t is1;
    uint8_t is2;
    
} struct_pt;

struct_pt g_p_t[366]= {
    1, 29, 2, 49, 8, 15, 11, 16, 13, 37, 14, 52,
    1, 29, 2, 49, 8, 16, 11, 17, 13, 37, 14, 53,
    1, 29, 2, 50, 8, 16, 11, 18, 13, 38, 14, 53,
…………..
    }

const char *filePath = "/Users/usr/path/to/folder/filename.bin”;

FILE *file = fopen(filePath, "wb");

if (file != NULL) {
        fwrite(g_p_t, sizeof(uint8_t), sizeof(g_p_t), file);
}

这是我的 PHP 代码


// array of 366 rows
$arr = [1, 29, 2, 49, 8, 15, 11, 16, 13, 37, 14, 52,
1, 29, 2, 49, 8, 16, 11, 17, 13, 37, 14, 53,
1, 29, 2, 50, 8, 16, 11, 18, 13, 38, 14, 53,
……..
];

header("Content-Disposition: attachment; filename=\”file.bin\"");
header("Pragma: no-cache");
header("Expires: 0");


    for ($i=0; $i < count($arr); $i++) { 
        echo trim(pack("I", $arr[$i]));
    }


fclose($out);

?>

PHP 生成的二进制文件与 Obj-C 生成的文件有点不同。我想我需要在 PHP 中进行字符编码。

你能指导我在PHP中uint8_t的等效编码是什么吗?

【问题讨论】:

  • 您的示例代码是 C,而不是 Objective-C。而且您的结构与struct { uint16_t fj; uint16_t sr; uint16_t zh; uint16_t as; uint16_t mg; uint16_t is; } yourstructnametype; 几乎相同,这意味着您的array[366] 应该是= {{...},{...},{...}};,因为您设置了每个fj1,然后跳过11 个字符。
  • struct_pt g_p_t[366]uint8_t g_p_t[366] 不同。
  • @OlSen,是的,我正在关注 struct_pt 类型的 {{...},{...},...{...}}; 结构。对不起,不好的做法。但我的问题真的很重要吗?

标签: php objective-c types binaryfiles


【解决方案1】:

找到了解决办法。

PHPpack()通过带格式参数将数据打包成二进制字符串。

当我在pack() 中使用"I" -&gt; unsigned integer 时,会给出32 位编码的结果。然后trim() 去掉多余的空格,得到的数据变成8bit以下的编码。

我尝试在 PHP 中使用 chr() 从数字生成单字节字符串

echo chr($arr[$i]);

它对我有用:)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多