C++には、符号なし文字の配列があり、そのすべての位置には、16進数値のarray[0] = 0xFF; array[1] = 0x2A; array[2] = 0x33;
などがあります。次に、チェックサムを作成する関数があります。PHP 16進数の文字列を操作して合計する
unsigned char checksum = 0xFF;
for (i = 0; i <= array.size(); i++)
checksum -= array[i];
これは問題なく動作しますが、コードをPHPに移行する必要があります。
最初に見つかった問題は、アレイではなく、$string = "\xFF\x2A\x33";
のような16進文字列を使用していました。なぜなら、dio_writeを使用してシリアルポート経由で書き込む必要があるからです。私はこのコードを試しました:
$checksum = "\xFF";
for ($i = 0; $i < strlen($array); $i++)
$checksum -= $array[$i];
しかし、PHPはちょうど...このように動作しません。 $checksum
の値は変更されません。だから私は、これは、チェックサムを修正
$checksum = 255;
for ($i = 0; $i < strlen($array); $i++)
$checksum -= ord($array[$i]);
に番号を文字列から変換しようとしたが、その後私は、16進数の文字列に追加する必要があり、それが...署名されています。私は最終的にunsigned char型を作る方法を発見し、私が試した最後のコードは
$checksum = pack("C", "\xFF");
$sum = 0;
for ($i = 0; $i < strlen($array); $i++)
$sum += ord($array[$i]);
$checksum = pack("C", ord($checksum) - $sum);
されましたが、それはちょうど私に間違ったチェックサムを与えています。私は間違って何をしていますか?