[英]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.