gpt4 book ai didi

C++ 从字符数组到 BCD

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:58 26 4
gpt4 key购买 nike

使用“Arduino 语言”(C++ 包装器)的 Arduino 项目 -

我有一个 8 字符数组,它以 {'H','H',':','M','M',':','S,'S 的形式提供 24 小时时钟'} 并且我需要将其转换为 BCD。我以为我已经很好地理解了这个想法,但我得到了意想不到的结果。

作为一个基本示例,我想将 {'1','2'} 转换为 BCD - 理论在左边,我的代码结果在下图的右边.我怀疑问题出在 buff[0] 是一个 'number char',我尝试了 atoi(buff[0]) 但这仍然失败(我有相同的结果):

我怎样才能正确地做到这一点?我的基线代码是:

char buff[8] = {'1','2',':','3','4',':','5','5'};    
uint8_t HourTens = buff[0] && 0b11110000; // && 0xF0, should be 1
uint8_t HourUnits = buff[1] && 0b00001111; // && 0x0F, should be 2
uint8_t HourBCD = HourTens + HourUnits;

Serial.println( buff );
Serial.print("'"); Serial.print( buff[0] ); Serial.print( "', HourTens: " ); Serial.println( HourTens );
Serial.print("'"); Serial.print( buff[1] ); Serial.print( "', HourUnits: " ); Serial.println( HourUnits );
Serial.print( "HourBCD: " ); Serial.println( HourBCD );
Serial.println("***");

enter image description here

最佳答案

您的代码的问题在于 buff 中的数据是 ASCII 字符,而不是单个二进制数字。在执行到 BCD 的转换之前,您需要从每个数字中减去 '0':

uint8_t HourTens  = (buff[0] - '0'); // && 0xF0, will be 1

请注意,每个元素都有自己的字节,因此您无需屏蔽任何内容。

uint8_t HourBCD = ((buff[0] - '0') << 4) | (buff[1] - '0');

另请注意,由于数字是从零到九,您只需将高位数字移动四位即可获得有效的 BCD 表示。

关于C++ 从字符数组到 BCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439468/

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