P.A*_*SOW 3 c printf endianness
有人可以帮我理解发生了什么吗?
char pcMessage[255];
iMsgAllocatedLength=255;
unsigned long long ullRecordID = 135290303ULL;
sprintf_s(pcMsg, iMsgAllocatedLength, "%08X;%llu", ullRecordID, ullRecordID);
Run Code Online (Sandbox Code Playgroud)
给出以下结果
08105DBF ; 581067426850930688;
而
sprintf_s(pcMsg, iMsgAllocatedLength, "%010llu;%08X;", ullRecordID, ullRecordID);
Run Code Online (Sandbox Code Playgroud)
给出预期的结果
0135290303; 08105DBF
请注意,我只是颠倒了订单,并注意到
581067426850930688是08105DBF 00000000
请帮我理解.
打印unsigned long long使用%X格式说明符是未定义的行为,因为sprintf需要unsigned intfor %X.当您通过不幸的巧合切换说明符时,它会产生正确的结果.不同平台上的行为可能不一样.
使用%llX打印值:
sprintf_s(pcMsg, iMsgAllocatedLength, "%08llX;%llu", ullRecordID, ullRecordID);
Run Code Online (Sandbox Code Playgroud)