繁体   English   中英

C中的奇怪int输出

[英]Strange int output in C

我正在使用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?

提前致谢。

使用%d格式说明符,因为frame->ID是一个整数:

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

然后使用%s格式说明符来打印缓冲区:

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

有关printf手册页中格式说明符的更多信息。

%e格式说明符在传递int时需要double类型的参数。 结果行为是不确定的。 这里的所有都是它的。

通过使用%e您可以承诺使用snprintf 您保证在相应位置提供double参数。 稍后,您通过提供int而不是double来破坏了诺言,这导致了毫无意义的结果。 您实质上是对snprintf说谎关于frame->ID的类型。

%a还需要一个double参数。 为什么您坚持使用带int参数的double格式说明符? 你觉得这个怎么样?

提供正确类型的参数( double ),或使用正确的格式说明符( int %d )。 这个或那个。 像你一样混合起来将无法实现任何目标。

您需要在转换前将演员表ID加倍:

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

或者,您可以将其打印为整数:

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

检查此以获取有关snprintf的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM