Objective C uint8_t PHP 等效

Objective C uint8_t PHP equivalent

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

Objective 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 的等效编码是什么吗?

找到解决方案。

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

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

我尝试使用 PHP

中的 chr() 从数字生成单字节字符串
echo chr($arr[$i]);

它对我有用 :)。