#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//1:3:5:7:8:20:28:40
//80080800D5
//213,0,8,8,128,0,0,0
//#define ZXIC
#ifdef ZXIC
#define BAND_WIDTH 8
#else
#define BAND_WIDTH 4
#endif
int str_reverse(char *str)
{
int i, j;
char c;
if (NULL == str || (j = strlen(str)) == 0)
return -1;
for (i = 0, j--; i < j; i++, j--) {
c = str[i];
str[i] = str[j];
str[j] = c;
}
return 0;
}
void get_band_value(int band, int *offset, int *value)
{
int temp;
*offset = band / BAND_WIDTH;
temp = band % BAND_WIDTH;
if (temp == 0) {
(*offset)--;
#ifdef ZXIC
temp = BAND_WIDTH;
#else
temp = 2 * BAND_WIDTH;
#endif
}
#ifdef ZXIC
*value = pow(2, temp - 1);
#else
if (temp == BAND_WIDTH - 1) {
temp = BAND_WIDTH;
}
*value = temp;
#endif
}
int get_frequency_bands(char *band, char *bandBuf)
{
int bandValue, offset, value;
char *ptr = NULL, temp[64] = {0};
#ifdef ZXIC
int i, tempBuf[9] = {0};
#endif
if (NULL == band || NULL == bandBuf || strlen(band) == 0)
return -1;
memcpy(temp, band, strlen(band));
if ((ptr = strtok(temp, ":")) == NULL) {
ptr = temp;
}
do {
if ((bandValue = atoi(ptr)) <= 0)
return -1;
get_band_value(bandValue, &offset, &value);
#ifdef ZXIC
tempBuf[offset] += value;
#else
bandBuf[offset] += value;
if (bandBuf[offset] > '9') {
bandBuf[offset] += ('A' - '9' - 1);
}
#endif
ptr = strtok(NULL, ":");
} while (ptr);
#ifdef ZXIC
offset = 0;
for (i = 0; i < BAND_WIDTH; i++) {
offset += sprintf(&bandBuf[offset], "%d,", tempBuf[i]);
}
bandBuf[--offset] = '\0';
#else
bandBuf[++offset] = '\0';
#endif
#ifdef ZXIC
return 0;
#else
return str_reverse(bandBuf);
#endif
}
int main(int argc, char *argv[])
{
char band[32] = "00000000000000000000";
get_frequency_bands("1:3:5:7:8:20:28:40", band);
printf("band:%s\n", band);
return 0;
}