Subversion Repositories HomeAutomation

Rev

Rev 1227 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1227 Rev 1380
Line 51... Line 51...
51
    {
51
    {
52
        if (bin[n] == '1')
52
        if (bin[n] == '1')
53
            num += (unsigned int)pow(2.0f, (int)(bin.length()-1-n));
53
            num += (unsigned int)pow(2.0f, (int)(bin.length()-1-n));
54
    }
54
    }
55
 
55
 
-
 
56
    return num;
-
 
57
}
-
 
58
 
-
 
59
int bin2int(string bin)
-
 
60
{
-
 
61
    int num = 0;
-
 
62
    if (bin[0] == '1') {
-
 
63
        for (int n = bin.length()-1; n >= 0; n--)
-
 
64
        {
-
 
65
            if (bin[n] == '0')
-
 
66
                num += (unsigned int)pow(2.0f, (int)(bin.length()-1-n));
-
 
67
        }
-
 
68
    num = (num*(-1)) -1;
-
 
69
    } else {
-
 
70
        for (int n = bin.length()-1; n >= 0; n--)
-
 
71
        {
-
 
72
            if (bin[n] == '1')
-
 
73
                num += (unsigned int)pow(2.0f, (int)(bin.length()-1-n));
-
 
74
        }
-
 
75
    }
56
    return num;
76
    return num;
57
}
77
}
58
 
78
 
59
string invert(string bin)
79
string invert(string bin)
60
{
80
{
Line 67... Line 87...
67
}
87
}
68
 
88
 
69
float bin2float(string bin)
89
float bin2float(string bin)
70
{
90
{
71
    float num = 0;
91
    float num = 0;
72
 
92
 
73
    if (bin.length() == 0)
93
    if (bin.length() == 0)
74
        return 0.0f;
94
        return 0.0f;
75
 
95
 
76
    bool isNegative = false;;
96
    bool isNegative = false;;
77
 
97
 
78
    if (bin[0] == '1')
98
    if (bin[0] == '1')
79
    {
99
    {
80
        bin = invert(bin);
100
        bin = invert(bin);
81
        isNegative = true;
101
        isNegative = true;
82
    }
102
    }
83
 
103
 
84
    for (int n = bin.length()-1; n > 0; n--)
104
    for (int n = bin.length()-1; n > 0; n--)
85
    {
105
    {
86
        if (bin[n] == '1')
106
        if (bin[n] == '1')
87
            num += pow(2.0f, (int)(bin.length()-1-n));
107
            num += pow(2.0f, (int)(bin.length()-1-n));
88
    }
108
    }
89
 
109
 
90
    num /= 64.0f;
110
    num /= 64.0f;
91
 
111
 
92
    if (isNegative)
112
    if (isNegative)
93
        num = -num;
113
        num = -num;
94
 
114
 
95
    return num;
115
    return num;
96
}
116
}
97
 
117
 
98
string bin2hex(string bin)
118
string bin2hex(string bin)
99
{
119
{
100
    string hex;
120
    string hex;
101
 
121
 
102
    while (bin.size() > 0)
122
    while (bin.size() > 0)
103
    {
123
    {
104
        string part;
124
        string part;
Line 155... Line 175...
155
 
175
 
156
    return hex;
176
    return hex;
157
}
177
}
158
 
178
 
159
string float2bin(float num, int length)
179
string float2bin(float num, int length)
160
{
180
{
-
 
181
    // This is 16 bits, 6 bits is the decimal
161
    string bin;
182
    string bin;
162
 
-
 
163
    ///FIXME
183
    num = num*64;
164
 
-
 
165
    while (bin.size() < length)
-
 
166
        bin = "0" + bin;
184
    int16_t temp = (int16_t)num;
167
 
-
 
168
    return bin;
185
    return int2bin(temp, length);
169
}
186
}
170
 
187
 
171
string hex2bin(string hex)
188
string hex2bin(string hex)
172
{
189
{
173
    hex = strtolower(hex);
190
    hex = strtolower(hex);
Line 196... Line 213...
196
            case 'f': bin += "1111"; break;
213
            case 'f': bin += "1111"; break;
197
        }
214
        }
198
    }
215
    }
199
 
216
 
200
    return bin;
217
    return bin;
201
}
218
}
202
 
219
 
203
string uint2bin(unsigned int num, int length)
220
string uint2bin(unsigned int num, int length)
204
{
221
{
-
 
222
    string bin;
-
 
223
    while (num)
-
 
224
    {
-
 
225
        bin = char((num&1)+'0') + bin;
-
 
226
        num >>= 1;
-
 
227
    }
-
 
228
 
-
 
229
    while (bin.size() < length)
-
 
230
        bin = "0" + bin;
-
 
231
   
-
 
232
    string bin2;
-
 
233
    for (int i = 0; i < length; i++)
-
 
234
    {
-
 
235
        bin2 = bin2 + bin[i];
-
 
236
    }
-
 
237
   
-
 
238
    return bin2;
-
 
239
}
-
 
240
 
-
 
241
string int2bin(int num, int length)
-
 
242
{
205
    string bin;
243
    string bin;
-
 
244
    if (num < 0) {
-
 
245
    num *= -1;
-
 
246
    num -= 1;
-
 
247
    while (num)
-
 
248
    {
-
 
249
        bin = char((num&1)+'0') + bin;
-
 
250
        num >>= 1;
-
 
251
    }
-
 
252
 
-
 
253
    while (bin.size() < length)
-
 
254
        bin = "0" + bin;
-
 
255
    for (int i = 0; i < length; i++)
-
 
256
    {
-
 
257
        if (bin[i] == '0')
-
 
258
            bin[i] = '1';
-
 
259
        else
-
 
260
            bin[i] = '0';
-
 
261
    }
-
 
262
} else {
206
    while (num)
263
    while (num)
207
    {
264
    {
208
        bin = char((num&1)+'0') + bin;
265
        bin = char((num&1)+'0') + bin;
209
        num >>= 1;
266
        num >>= 1;
210
    }
267
    }
211
 
268
 
212
    while (bin.size() < length)
269
    while (bin.size() < length)
213
        bin = "0" + bin;
270
        bin = "0" + bin;
-
 
271
 
214
   
272
}
215
    string bin2;
273
    string bin2;
216
    for (int i = 0; i < length; i++)
274
    for (int i = 0; i < length; i++)
217
    {
275
    {
218
        bin2 = bin2 + bin[i];
276
        bin2 = bin2 + bin[i];
219
    }
277
    }
220
   
278
   
221
    return bin2;
279
    return bin2;
-
 
280
}
-
 
281
 
-
 
282
string int2hex(int num, int length)
-
 
283
{
-
 
284
    return bin2hex(int2bin(num, length));
222
}
285
}
223
 
286
 
224
string uint2hex(unsigned int num, int length)
287
string uint2hex(unsigned int num, int length)
225
{
288
{
226
    return bin2hex(uint2bin(num, length));
289
    return bin2hex(uint2bin(num, length));