2

OpenCVを使用していますが、Iplimage->IDをchar[]に変換して、TCPを使用して送信し、サーバー上でintに再変換できるようにする必要があります。

Iplimageヘッダーは次のとおりです。

typedef struct _IplImage
{
    int  nSize;
    int  ID;  //<--- ID of type INT
    int  nChannels;
    int  alphaChannel;
    int  depth;
    char colorModel[4];
    char channelSeq[4];
    int  dataOrder;
    int  origin;
    int  align;
    int  width;
    int  height;
    struct _IplROI *roi;
    struct _IplImage *maskROI;
    void  *imageId;
    struct _IplTileInfo *tileInfo;
    int  imageSize;
    char *imageData;
    int  widthStep;
    int  BorderMode[4];
    int  BorderConst[4];
    char *imageDataOrigin;
}
IplImage;

これは私のコードです:

char IDbuffer[10];
snprintf(IDbuffer,10,"%e",frame->ID);//where frame is of type IplImage*
printf("frame->ID= %a\n",IDbuffer);

そしてこれは私が印刷したものです:

フレーム->ID= 0x0.0000000037d0cp-1022

試しても

printf("frame->ID= %a\n",frame->ID);

同じ出力をください。

これは整数形式ですか?はいの場合、この形式のchar *をintに変換するにはどうすればよいですか?

前もって感謝します。

4

3 に答える 3

4

は整数である%dため、フォーマット指定子を使用します。frame->ID

snprintf(IDbuffer,10,"%d",frame->ID);

次に、%sフォーマット指定子を使用してバッファを出力します。

printf("frame->ID= %s\n",IDbuffer);

フォーマット指定子に関する詳細は、printfの man ページにあります。

于 2013-01-06T09:44:18.860 に答える
2

%e書式指定子には type の引数が必要doubleですが、代わりに を渡していintます。結果の動作は未定義です。それだけです。

を使用することにより、%eあなたは約束をすることになりsnprintfます。double対応する位置で引数を提供することを約束します。後でint代わりに を指定することでその約束を破りdouble、無意味な結果につながります。あなたは基本的にsnprintfのタイプについて嘘をついていframe->IDます。

%adouble引数も必要です。double引数でフォーマット指定子を使用することを主張するのはなぜintですか? これがどのように機能すると思いますか?

正しい型 ( ) の引数をdouble指定するか、適切な書式指定子 ( ) を使用し%dますint。これまたはあれのどちらか。あなたのように物事を混ぜ合わせても、何も達成できません。

于 2013-01-06T09:43:25.197 に答える
1

ID印刷する前に double にキャストする必要があります。

snprintf(IDbuffer,10,"%e", (double)frame->ID);

または、整数として出力できます。

snprintf(IDbuffer,10,"%d", frame->ID)

snprintfの詳細については、これを確認してください

于 2013-01-06T09:43:46.007 に答える