28AisBitstring::AisBitstring(
const char *str) {
29 byte_length = strlen(str);
31 for (
int i = 0; i < byte_length; i++) {
32 bitbytes[i] = to_6bit(str[i]);
36int AisBitstring::GetBitCount() {
return byte_length * 6; }
40unsigned char AisBitstring::to_6bit(
const char c) {
41 if (c < 0x30)
return (
unsigned char)-1;
42 if (c > 0x77)
return (
unsigned char)-1;
43 if ((0x57 < c) && (c < 0x60))
return (
unsigned char)-1;
53 return (
unsigned char)(cp & 0x3f);
62 for (
int i = 0; i < len; i++) {
66 c0 = (cx >> (5 - ((s0p + i) % 6))) & 1;
67 if (i == 0 && signed_flag &&
76int AisBitstring::GetStr(
int sp,
int bit_len,
char *dest,
int max_len) {
78 char *temp_str = dest;
87 while (i < bit_len && k < max_len) {
89 for (
int j = 0; j < 6; j++) {
93 cs = 5 - ((s0p + i) % 6);
99 temp_str[k] = (char)(acc & 0x3f);
101 if (acc < 32) temp_str[k] += 0x40;
int GetInt(int sp, int len, bool signed_flag=false)
sp is starting bit, 1-based