Moved integer conversion routines
This commit is contained in:
parent
18dc2b1eab
commit
8f004f11c4
3 changed files with 58 additions and 52 deletions
52
pack.cpp
52
pack.cpp
|
@ -71,58 +71,6 @@ void pack3_6bit(uint32_t nc1, uint32_t nc2, uint16_t ng, uint8_t *payload) {
|
|||
}
|
||||
|
||||
|
||||
// Parse a 2 digit integer from string
|
||||
int dd_to_int(const char *str, int length) {
|
||||
int result = 0;
|
||||
bool negative;
|
||||
int i;
|
||||
if (str[0] == '-') {
|
||||
negative = true;
|
||||
i = 1; // Consume the - sign
|
||||
}
|
||||
else {
|
||||
negative = false;
|
||||
i = (str[0] == '+') ? 1 : 0; // Consume a + sign if found
|
||||
}
|
||||
|
||||
while (i < length) {
|
||||
if (str[i] == 0) break;
|
||||
if (!is_digit(str[i])) break;
|
||||
result *= 10;
|
||||
result += (str[i] - '0');
|
||||
++i;
|
||||
}
|
||||
|
||||
return negative ? -result : result;
|
||||
}
|
||||
|
||||
|
||||
// Convert a 2 digit integer to string
|
||||
void int_to_dd(char *str, int value, int width) {
|
||||
if (value < 0) {
|
||||
*str = '-';
|
||||
++str;
|
||||
value = -value;
|
||||
}
|
||||
|
||||
int divisor = 1;
|
||||
for (int i = 0; i < width; ++i) {
|
||||
divisor *= 10;
|
||||
}
|
||||
|
||||
while (divisor > 1) {
|
||||
int digit = value / divisor;
|
||||
|
||||
*str = '0' + digit;
|
||||
++str;
|
||||
|
||||
value -= digit * divisor;
|
||||
divisor /= 10;
|
||||
}
|
||||
*str = 0; // Add zero terminator
|
||||
}
|
||||
|
||||
|
||||
// Pack a valid callsign into a 28-bit integer.
|
||||
// Note that callsign points to a portion of text and may not be zero-terminated.
|
||||
int32_t packcall(const char *callsign, int length) {
|
||||
|
|
52
text.cpp
52
text.cpp
|
@ -49,3 +49,55 @@ void fmtmsg(char *msg_out, const char *msg_in) {
|
|||
}
|
||||
*msg_out = 0; // Add zero termination
|
||||
}
|
||||
|
||||
|
||||
// Parse a 2 digit integer from string
|
||||
int dd_to_int(const char *str, int length) {
|
||||
int result = 0;
|
||||
bool negative;
|
||||
int i;
|
||||
if (str[0] == '-') {
|
||||
negative = true;
|
||||
i = 1; // Consume the - sign
|
||||
}
|
||||
else {
|
||||
negative = false;
|
||||
i = (str[0] == '+') ? 1 : 0; // Consume a + sign if found
|
||||
}
|
||||
|
||||
while (i < length) {
|
||||
if (str[i] == 0) break;
|
||||
if (!is_digit(str[i])) break;
|
||||
result *= 10;
|
||||
result += (str[i] - '0');
|
||||
++i;
|
||||
}
|
||||
|
||||
return negative ? -result : result;
|
||||
}
|
||||
|
||||
|
||||
// Convert a 2 digit integer to string
|
||||
void int_to_dd(char *str, int value, int width) {
|
||||
if (value < 0) {
|
||||
*str = '-';
|
||||
++str;
|
||||
value = -value;
|
||||
}
|
||||
|
||||
int divisor = 1;
|
||||
for (int i = 0; i < width; ++i) {
|
||||
divisor *= 10;
|
||||
}
|
||||
|
||||
while (divisor > 1) {
|
||||
int digit = value / divisor;
|
||||
|
||||
*str = '0' + digit;
|
||||
++str;
|
||||
|
||||
value -= digit * divisor;
|
||||
divisor /= 10;
|
||||
}
|
||||
*str = 0; // Add zero terminator
|
||||
}
|
6
text.h
6
text.h
|
@ -12,3 +12,9 @@ bool equals(const char *string1, const char *string2);
|
|||
// - replaces lowercase letters with uppercase
|
||||
// - merges consecutive spaces into single space
|
||||
void fmtmsg(char *msg_out, const char *msg_in);
|
||||
|
||||
// Parse a 2 digit integer from string
|
||||
int dd_to_int(const char *str, int length);
|
||||
|
||||
// Convert a 2 digit integer to string
|
||||
void int_to_dd(char *str, int value, int width);
|
||||
|
|
Loading…
Reference in a new issue