gpt4 book ai didi

c++ - 将 C11 Annex K 的 sprintf_s 转换为 C99 snprintf

转载 作者:行者123 更新时间:2023-11-30 04:20:22 32 4
gpt4 key购买 nike

我将 sprintf_s 函数转换为这种格式的 C99。只是想确定一下,结果是一样的:

sprintf_s(char_star,"%08X",some_int);

char_star 的大小为 8,它将 some_int 转换为 8 字节的 char_star

那么我在 C99 中所做的是正确的吗?我使用了以下函数之一,尽管这些 C99 函数的输出和 C11 Annex K sprintf_s 不一样

char str[9];
snprintf (str, 8, "%08x", i );
// sprintf(str, "%08x", i);
QByteArray built(str, 8);
qDebug() << built.toHex();

在 MFC 中,它用 sprintf 给了我这个数据包

30 30 30 31 30 30 44 43

在 C99 中(Linux glibc)sprintf(str, "%08x", i) 给出

30 30 30 31 30 30 64 63

你知道问题出在哪里吗?

这是整个函数:

bool BuildAnglePacket(char* WR_PacketAZAngle, float AZAngle)
{

WR_PacketAZAngle[0] = 0x04;
WR_PacketAZAngle[1] = 0x30;
WR_PacketAZAngle[2] = 0x31;
WR_PacketAZAngle[3] = 0x02;
WR_PacketAZAngle[4] = 0x79;
WR_PacketAZAngle[5] = 0x4E;
WR_PacketAZAngle[6] = 0x48;

int XOR;
char HAnlge[9];
int iAzimuthAngle;


if (AZAngle >= -22.5 && AZAngle <= 22.5 )
{

iAzimuthAngle = AZAngle*10;

if( AZAngle < 0)
{

iAzimuthAngle= abs(iAzimuthAngle);
iAzimuthAngle=((~iAzimuthAngle)&0xFFFF) + 1 ;
}

iAzimuthAngle=65536 + iAzimuthAngle;

sprintf(HAnlge,"%08x", iAzimuthAngle);

WR_PacketAZAngle[7] = HAnlge[0];
WR_PacketAZAngle[8] = HAnlge[1];
WR_PacketAZAngle[9] = HAnlge[2];
WR_PacketAZAngle[10] = HAnlge[3];
WR_PacketAZAngle[11] = HAnlge[4];
WR_PacketAZAngle[12] = HAnlge[5];
WR_PacketAZAngle[13] = HAnlge[6];
WR_PacketAZAngle[14] = HAnlge[7];
WR_PacketAZAngle[15] = 0x03;

for(int i=4;i<16;i++)
XOR ^= WR_PacketAZAngle[i];

WR_PacketAZAngle[16] = XOR;
WR_PacketAZAngle[17] ='\x0';
}

return true;
}

最佳答案

char_star 的大小应至少为 9 才能有一个空间来存储最后一个 \0

关于c++ - 将 C11 Annex K 的 sprintf_s 转换为 C99 snprintf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15339013/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com