0
我有一些非常简单的代码,从ADS传感器读取,它返回值为int16_t
。我知道这个值总是正面的,所以它可以节省内存。我将它存储在uint8_t
的数组中。但是,我正在得到一个非常奇怪的转换 - 任何想法?Arduino int16_t到uint8_t转换奇怪
下面是代码:
int16_t ads0 = ads.readADC_SingleEnded(0);
int16_t ads1 = ads.readADC_SingleEnded(1);
PLUG_ADS[0][PLUG_ADS_IDX] = (uint8_t)ads0;
PLUG_ADS[1][PLUG_ADS_IDX] = (uint8_t)ads1;
Serial.print("ADS 0: ");
Serial.print(ads0);
Serial.print("/");
Serial.print(PLUG_ADS[0][PLUG_ADS_IDX]);
Serial.print(" ADS 1: ");
Serial.print(ads1);
Serial.print("/");
Serial.println(PLUG_ADS[1][PLUG_ADS_IDX]);
这里是输出:
ADS 0: 791/23 ADS 1: 845/77
ADS 0: 792/24 ADS 1: 844/76
ADS 0: 794/26 ADS 1: 843/75
ADS 0: 790/22 ADS 1: 843/75
ADS 0: 792/24 ADS 1: 844/76
ADS 0: 793/25 ADS 1: 843/75
ADS 0: 794/26 ADS 1: 843/75
ADS 0: 791/23 ADS 1: 844/76
ADS 0: 790/22 ADS 1: 844/76
ADS 0: 793/25 ADS 1: 845/77
ADS 0: 791/23 ADS 1: 843/75
ADS 0: 792/24 ADS 1: 843/75
ADS 0: 791/23 ADS 1: 844/76
ADS 0: 792/24 ADS 1: 844/76
ADS 0: 791/23 ADS 1: 844/76
ADS 0: 792/24 ADS 1: 844/76
ADS 0: 794/26 ADS 1: 846/78
ADS 0: 793/25 ADS 1: 842/74
ADS 0: 793/25 ADS 1: 844/76
ADS 0: 793/25 ADS 1: 845/77
ADS 0: 793/25 ADS 1: 845/77
ADS 0: 793/25 ADS 1: 844/76
ADS 0: 797/29 ADS 1: 847/79
ADS 0: 792/24 ADS 1: 843/75
赫克我错过了什么?
谢谢你指出我的骨头错误......我只是在想,uint8_t更大...... dope – DaKaZ
的确,因为你只使用'int16_t'的正值,你应该能够节省内存,因为有一半的可能状态未被使用。错误是假设一半状态意味着一半位。每个比特使整数可以具有的状态数量加倍,浪费是1比特。你需要某种无符号的15位整数来恢复浪费的内存。 –
@FrançoisAndrieux--当然,这就是这并不能真正保存任何记忆的原因;摆脱一点不会影响使用的存储量。 –