snprintf 问题

EL-PAAS微服务 2018-07-28 02:08:43
char szEncode[33];
.......
char szEncodeHex[SHAEncodeHexLen + 1]; // SHAEncodeHexLen = 64
memset(szEncodeHex, 0, SHAEncodeHexLen + 1);
int iPos += snprintf(szEncodeHex + iPos, SHAEncodeHexLen + 1- iPos, "%02x%02x%02x%02x", szEncode[0], szEncode[1], szEncode[2], szEncode[3]);

调试时 iPos的值为20, 打印szEncodeHex也是有20个字符,搞不懂为什么。
哪位大神能解释一下?
...全文
219 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-07-30
  • 打赏
  • 举报
回复
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
EL-PAAS微服务 2018-07-29
  • 打赏
  • 举报
回复
引用 2 楼 goldenhawking 的回复:
那是因为有负号
试一试:

#include "stdafx.h"
#include <string.h>
#include <memory.h>

int main()
{
const int SHAEncodeHexLen = 64;
char szEncode[33] = "哈aaaaaaaaaaaaaa";
char szEncodeHex[SHAEncodeHexLen + 1];
memset(szEncodeHex, 0, SHAEncodeHexLen + 1);
int iPos = 0;
iPos += snprintf(szEncodeHex + iPos, SHAEncodeHexLen + 1 - iPos, "%02x%02x%02x%02x",
unsigned char(szEncode[0]), unsigned char(szEncode[1]), unsigned char(szEncode[2]), unsigned char(szEncode[3]));
puts(szEncodeHex);
printf("%d\n", iPos);
}


转换为无符号就好啦。
有符号的时候,负数超过了02X的表示范围。

确实是这样,%x不能表示负数,难道就不会自动强转么?还会导致这种错误。
这样的话,如果是 int 类型或者 short int 类型,如果是负数也会有同样的问题了?
  • 打赏
  • 举报
回复
那是因为有负号
试一试:

#include "stdafx.h"
#include <string.h>
#include <memory.h>

int main()
{
const int SHAEncodeHexLen = 64;
char szEncode[33] = "哈aaaaaaaaaaaaaa";
char szEncodeHex[SHAEncodeHexLen + 1];
memset(szEncodeHex, 0, SHAEncodeHexLen + 1);
int iPos = 0;
iPos += snprintf(szEncodeHex + iPos, SHAEncodeHexLen + 1 - iPos, "%02x%02x%02x%02x",
unsigned char(szEncode[0]), unsigned char(szEncode[1]), unsigned char(szEncode[2]), unsigned char(szEncode[3]));
puts(szEncodeHex);
printf("%d\n", iPos);
}


转换为无符号就好啦。
有符号的时候,负数超过了02X的表示范围。

EL-PAAS微服务 2018-07-28
  • 打赏
  • 举报
回复
改正: int iPos = 0; iPos += snprintf .....

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧