バッファー1とバッファー2の値は同じであっても動作しません。おそらくprintfコマンドで使用する書式設定は、差異(%i、%fなど)をマスクすることです。 printfを使用するのではなく、ブレークポイントを設定し、デバッガを使用して値を調べてみてください。これは実際に間違っていることを明らかにするのに役立ちます。
EDIT:
あなたはキャストを実行方法についてのご意見を考えると、私は今助けることができると思います。入ってくる生データはunsigned char型です。ほとんどのプラットフォームでは、0〜255の整数値になります。この値を浮動小数点数に変換して操作したいとします。データを任意の操作のための浮動小数点型として意味のあるものにするには、この範囲を+/- 1.0の間で拡大/縮小する必要があります。次のコードでは、これが "スケール"変数の値です。
#include <iostream>
#include <math.h>
int main()
{
const int BUFFER_LEN = 6;
const unsigned char channelDataIN[] = {0,255, 1, 254, 2, 253};
unsigned char channelDataOUT[BUFFER_LEN];
float channelDataF[BUFFER_LEN];
std::cout.precision(5);
float scale = powf(2.f, 8.f*sizeof(unsigned char)) - 1.f;
for (int mm = 0; mm < BUFFER_LEN; ++mm)
{
std::cout << "Original = " << (int)channelDataIN[mm] << std::endl;
channelDataF[mm] = (float)(channelDataIN[mm]) * 2.f/scale - 1.f; //Float cast
std::cout << "Float conversion = " << channelDataF[mm] << std::endl;
channelDataOUT[mm] = (unsigned char) ceil( (1.f+channelDataF[mm]) * scale/2.f );
std::cout << "Recovered = " << (int)channelDataOUT[mm] << std::endl;
if (channelDataIN[mm] == channelDataOUT[mm])
std::cout << "The output precisely equals the input" << std::endl << std::endl;
else
std::cout << "The output != input" << std::endl << std::endl;
}
return 0;
}
値を戻した後の符号なし文字の出力配列は、入力配列と同じです。これはコードからの出力です。 。 。
Original = 0
Float conversion = -1
Recovered = 0
The output precisely equals the input
Original = 255
Float conversion = 1
Recovered = 255
The output precisely equals the input
Original = 1
Float conversion = -0.99216
Recovered = 1
The output precisely equals the input
Original = 254
Float conversion = 0.99216
Recovered = 254
The output precisely equals the input
Original = 2
Float conversion = -0.98431
Recovered = 2
The output precisely equals the input
Original = 253
Float conversion = 0.98431
Recovered = 253
The output precisely equals the input
こんにちは、ありがとうございます。私は古典的な形でキャストを行います:for(i = 0; i
victor
buffer1 [i]とbuffer [2]の値を比較すると、equalではありません(buffer2 [i]はbuffer2 [i]よりも大きい) – victor