gpt4 book ai didi

c++ - 换档时的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 05:21:12 26 4
gpt4 key购买 nike

当我使用 Cypress 的 SDCard 库写入我的 SD 卡时,我遇到了一些挑战。因为我必须加快一切,所以不可能使用 sprintf() 和类似的方法。

库只允许我以 uchars 或字符串的形式写入 SD 卡。不幸的是,我的值都是 int16_t。所以这里是问题出现的地方:

int16_t  ax = -15000;
ay = -10000;
az = -32760;
gx = 32760;
gy = 25000;
gz = 10;
mx = -10;
my = 20;
mz = 0;

// Then I put it into an array

char suma[] = {
((uint16_t) ax) & 0xff,
((uint16_t) ax) >> 8,
((uint16_t) ay) & 0xff,
((uint16_t) ay) >> 8,
((uint16_t) az) & 0xff,
((uint16_t) az) >> 8,

((uint16_t) gx) & 0xff,
((uint16_t) gx) >> 8,
((uint16_t) gy) & 0xff,
((uint16_t) gy) >> 8,
((uint16_t) gz) & 0xff,
((uint16_t) gz) >> 8,

((uint16_t) mx) & 0xff,
((uint16_t) mx) >> 8,
((uint16_t) my) & 0xff,
((uint16_t) my) >> 8,
((uint16_t) mz) & 0xff,
((uint16_t) mz) >> 8,
0
};

当我检索数据时出了点问题。在 gz 之前数据都很好。它显示 10 好,但其余的都不见了。

将 10 更改为 257 可以消除该问题,-10 也可以,这意味着当我右移一个较低的非负值时会发生错误。

怎么了?我希望你有一些见解:)

最佳答案

在将 int16_t 转换为 uint16,然后再转换为 char 时,您可能最终会发送一个 null char (\0 ) 到图书馆。

库 - 只接受 char[]string - 可能将前者转换为 c 字符串,以 null char 结尾>。这意味着您的最高有效字节 (0x00) 正在提前终止字符串。任何低于 257 的 uint16 都将在最重要的位置产生空字符。

例如:

0000 0000 = [0, 0] = [0x00, 0x00]   // 2 null chars, only the first will get across
0001 0000 = [1, 0] = [0x01, 0x00] // null char
// ...
1111 0000 = [256, 0] = [0xff, 0x00] // null char
1111 0001 = [256, 1] = [0xff, 0x01] // not null char

尝试将 char[] 显式转换为 std::string 并指定它的大小。例如:

std::string s("ab\0c", 4);

关于c++ - 换档时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40303698/

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