我正在准备一个Arduino项目。我想拿一个学生编号,这是9位数,如140201004,我想用它作为ID。但是当我写入串行监视器时,它将转换为19500.
我做错了什么?
int readnumber(void) {
int num = 0;
boolean validnum = false;
while (1) {
while (! Serial.available());
char c = Serial.read();
if (isdigit(c)) {
num *= 10;
num += c - '0';
validnum = true;
} else if (validnum) {
return num;
}
}
}
void loop() {
delay(100);
if(Serial.available()>0) {
data=Serial.read();
if(data=='1') {
Serial.print("Enrolling ID #");
int id = readnumber();
Serial.println(id);
getFingerprintEnroll(id);
}
if(data=='4') {
getFingerprintID();
}
}
}
答案 0 :(得分:3)
int
是一个16位有符号整数,数字可以从−32,768
变为32,767
。
你的号码140,201,004
显然太大了。
二进制140,201,004
中的00001000 01011011 01001100 00101100
是01001100 00101100
,如果你只取低16位,你会看到19,500
十进制int num = 0;
。
为了能够存储该号码,您需要一个32位整数。而且由于你不需要负数,所以它应该是未签名的。
你应该替换
unsigned long num = 0;
与
uint32_t num = 0;
或
var myApp = angular.module('sample', []);
myApp.controller('firstCtrl', function($scope) {
$scope.sum = function() {
$scope.$emit('sumTwoNumber', [1, 2]);
};
});
myApp.controller('secondCtrl', function($scope) {
$scope.$on('sumTwoNumber', function(e, data) {
var sum = 0;
for (var a = 0; a < data.length; a++) {
sum = sum + data[a];
}
console.log('event working', sum);
});
});
同时替换函数的返回类型。