【发布时间】:2020-10-15 10:43:04
【问题描述】:
我有以下代码将原始 ASCII 数据转换为十六进制字符串。完整的c代码可以找到here
void str2hex(char* inputStr, char* outputStr)
{
int i;
int counter;
i=0;
counter=0;
while(inputStr[counter] != '\0')
{
sprintf((char*)(outputStr+i),"%02X", inputStr[counter]);
i+=2; counter+=1;
}
outputStr[i++] = '\0';
}
它适用于大多数值。但是当我使用 echo as stdin echo 11223344556677881122334455667788|xxd -r -p| ./CProgram --stdin从终端尝试以下输入时@
11223344556677881122334455667788
它返回以下输出
11223344556677FF11223344556677FF
可以看出,它返回的是FF,而不是88。
如何调整此代码以获取 88 而不是 FF。
【问题讨论】:
-
请提供minimal verifiable example。此外,不清楚您为什么说
"11223344556677881122334455667788"的输入应该返回完全相同的字符串。这就是你说的吗?如果不是,请澄清。 -
But when I am trying the following input“你如何”尝试以下输入?请将代码和您的修改以文本形式发布到问题中。不需要outputStr[i++] = '\0';-sprintf已经这样做了。 -
我用尝试将输入传递给程序的方式更新了问题
-
在看到你如何输入之后,我更新了我的答案。问题本质上是符号问题(
inputStr[counter]可能是一个负数)。