在 C 中使用 strtol() 将 char 数组转换为 int
Converting char array to int with strtol() in C
我对 C 中的 strtol() 函数有困难,这里有一段代码说明了我如何尝试使用它
char TempChar;
char SerialBuffer[21];
char hexVoltage[2];
long intVoltage;
do
{
Status = ReadFile(hComm, &TempChar, sizeof(TempChar), &NoBytesRead, NULL);
SerialBuffer[i] = TempChar;
i++;
}
while (NoBytesRead > 0);
memcpy(hexVoltage, SerialBuffer+3, 2);
intVoltage = strtol(hexVoltage, NULL, 16);
所以问题是为什么 strtol() returns 0 ?以及如何将十六进制值的 char 数组转换为 int(在这种特殊情况下为 long)?在我的例子中,hexVoltage 在 memcpy() 之后包含 {03, 34}。
提前致谢。非常感谢这里的帮助。
strtol
和朋友希望您为他们提供数字的可打印 ASCII 表示形式。相反,您为其提供从文件(端口)读取的二进制序列。
在这种情况下,您的 intVoltage
可以通过按位运算将两个读取字节组合成一个 2 字节数字来计算,具体取决于这些数字在您平台上的字节顺序:
uint8_t binVoltage[2];
...
uint16_t intVoltage = binVoltage[0] | (binVoltage[1] << 8);
/* or */
uint16_t intVoltage = (binVoltage[0] << 8) | binVoltage[1];
我对 C 中的 strtol() 函数有困难,这里有一段代码说明了我如何尝试使用它
char TempChar;
char SerialBuffer[21];
char hexVoltage[2];
long intVoltage;
do
{
Status = ReadFile(hComm, &TempChar, sizeof(TempChar), &NoBytesRead, NULL);
SerialBuffer[i] = TempChar;
i++;
}
while (NoBytesRead > 0);
memcpy(hexVoltage, SerialBuffer+3, 2);
intVoltage = strtol(hexVoltage, NULL, 16);
所以问题是为什么 strtol() returns 0 ?以及如何将十六进制值的 char 数组转换为 int(在这种特殊情况下为 long)?在我的例子中,hexVoltage 在 memcpy() 之后包含 {03, 34}。 提前致谢。非常感谢这里的帮助。
strtol
和朋友希望您为他们提供数字的可打印 ASCII 表示形式。相反,您为其提供从文件(端口)读取的二进制序列。
在这种情况下,您的 intVoltage
可以通过按位运算将两个读取字节组合成一个 2 字节数字来计算,具体取决于这些数字在您平台上的字节顺序:
uint8_t binVoltage[2];
...
uint16_t intVoltage = binVoltage[0] | (binVoltage[1] << 8);
/* or */
uint16_t intVoltage = (binVoltage[0] << 8) | binVoltage[1];