sprintf 会自动追加’\0’至字符串末尾

本文详细介绍了C_CosemObjMeterInfo类中设置串口计量设备序列号的方法。通过实例展示了如何使用sprintf和memcpy函数将64位的序列号转换为固定长度的字符串,并存储到指定的设备信息表中。同时,文章还分析了输出结果,解释了在12位数据后自动追加0x00字符的原因。
AI助手已提取文章相关产品:

 

#define LEN_SERIAL_NUMBER (12)

void C_CosemObjMeterInfo::SetSerialNum(U08 u08MeterId, U64 u64SerialNum)
{
    U08 u08tmp[LEN_SERIAL_NUMBER+2] = {0};
    memset(u08tmp, 0xFF, sizeof(u08tmp));            // 将缓存置为0xFF
   
    sprintf((char *)u08tmp, "%012lld", u64SerialNum);        // 打印12位数据至缓存

    memcpy(m_stMeterInfoTbl[u08MeterId].serialNum, u08tmp, LEN_SERIAL_NUMBER);
   
    printf("\r\nUpdate Meter%d's serial num to %012s\r\n", u08MeterId, u08tmp);

    for (U08 j = 0; j < sizeof(u08tmp); j++)
    {
        printf("0x%02x ", u08tmp[j]);
    }
}

打印输出结果如下:

Update Meter0's serial num to 098020000703
0x30 0x39 0x38 0x30 0x32 0x30 0x30 0x30 0x30 0x37 0x30 0x33 0x00 0xff

由输出结果可以清楚地看出,在12位数据之后,自动追加了0x00,即’\0’。

转载于:https://www.cnblogs.com/outs/p/10272239.html

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值