gpt4 book ai didi

从 char 数组转换为 16 位有符号整数和 32 位无符号整数

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:16 34 4
gpt4 key购买 nike

我正在为我开发的 PCB 开发一些嵌入式 C,但我的 C 有点生锈了!

我正在寻找从 char 数组到各种整数类型的一些转换。

第一个例子:

[input]        " 1234" (note the space before the 1)
[convert to] (int16_t) 1234

第二个例子:

[input]        "-1234"
[convert to] (int16_t) -1234

第三个例子:

[input]        "2017061234"
[convert to] (uint32_t) 2017061234

我试过使用 atoi(),但似乎没有得到预期的结果。有什么建议吗?

[编辑]

这是转换代码:

char *c_sensor_id = "0061176056";
char *c_reading1 = " 3630";
char *c_reading2 = "-24.30";

uint32_t sensor_id = atoi(c_sensor_id); // comes out as 536880136
uint16_t reading1 = atoi(c_reading1); // comes out as 9224
uint16_t reading2 = atoi(c_reading2); // comes out as 9224

最佳答案

一些事情:

  • 切勿使用 atoi 函数系列,因为它们没有错误处理功能,并且如果输入格式不正确可能会崩溃。相反,请使用 strtol 函数系列。
  • 这两个函数中的任何一个在资源受限的微 Controller 上都占用了大量资源。您可能需要推出您自己的 strtol 版本。

例子:

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>

int main()
{
const char* c_sensor_id = "0061176056";
const char* c_reading1 = " 3630";
const char* c_reading2 = "-1234";

c_reading1++; // fix the weird string format

uint32_t sensor_id = (uint32_t)strtoul(c_sensor_id, NULL, 10);
uint16_t reading1 = (uint16_t)strtoul(c_reading1, NULL, 10);
int16_t reading2 = (int16_t) strtol (c_reading2, NULL, 10);

printf("%"PRIu32 "\n", sensor_id);
printf("%"PRIu16 "\n", reading1);
printf("%"PRId16 "\n", reading2);

}

输出:

61176056
3630
-1234

关于从 char 数组转换为 16 位有符号整数和 32 位无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44696500/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com