Rev 1646 | Rev 1766 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 1646 | Rev 1689 | ||
|---|---|---|---|
| Line 300... | Line 300... | ||
| 300 | return xml::Node::NodeList(); |
300 | return xml::Node::NodeList(); |
| 301 | } |
301 | } |
| 302 | 302 | ||
| 303 | std::string Protocol::DecodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length) |
303 | std::string Protocol::DecodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length) |
| 304 | { |
304 | { |
| - | 305 | bool sign = bitset.Get(start_bit) == 1; |
|
| - | 306 | ||
| 305 | unsigned long raw_bit_value = bitset.Read(start_bit, bit_length); |
307 | unsigned long raw_bit_value = bitset.Read(start_bit, bit_length); |
| 306 | int raw_value = 0; |
- | |
| 307 | - | ||
| 308 | memcpy(&raw_value, &raw_bit_value, sizeof(raw_value)); |
- | |
| 309 | 308 | ||
| - | 309 | int raw_value = raw_bit_value; |
|
| - | 310 | ||
| - | 311 | if (sign) |
|
| - | 312 | { |
|
| - | 313 | long mask = 0; |
|
| - | 314 | ||
| - | 315 | for (unsigned int n = 0; n < bit_length; n++) |
|
| - | 316 | { |
|
| - | 317 | mask += (1 << n); |
|
| - | 318 | } |
|
| - | 319 | ||
| - | 320 | raw_value = -((~raw_bit_value) & mask); |
|
| - | 321 | } |
|
| - | 322 | ||
| 310 | return boost::lexical_cast<std::string>(raw_value); |
323 | return boost::lexical_cast<std::string>(raw_value); |
| 311 | } |
324 | } |
| 312 | 325 | ||
| 313 | void Protocol::EncodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value) |
326 | void Protocol::EncodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value) |
| 314 | { |
327 | { |
| 315 | unsigned long raw_bit_value = 0; |
328 | unsigned long raw_bit_value = 0; |
| 316 | int raw_value = boost::lexical_cast<int>(value); |
329 | int raw_value = boost::lexical_cast<int>(value); |
| 317 | 330 | ||
| 318 |
|
331 | raw_bit_value = raw_bit_value; |
| 319 | 332 | ||
| - | 333 | if (raw_value < 0) |
|
| - | 334 | { |
|
| - | 335 | long mask = 0; |
|
| - | 336 | ||
| - | 337 | for (unsigned int n = 0; n < bit_length; n++) |
|
| - | 338 | { |
|
| - | 339 | mask += (1 << n); |
|
| - | 340 | } |
|
| - | 341 | ||
| - | 342 | raw_bit_value = (~(-raw_value)) & mask; |
|
| - | 343 | } |
|
| - | 344 | ||
| 320 | bitset.Write(start_bit, bit_length, raw_bit_value); |
345 | bitset.Write(start_bit, bit_length, raw_bit_value); |
| 321 | } |
346 | } |
| 322 | 347 | ||
| 323 | std::string Protocol::DecodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length) |
348 | std::string Protocol::DecodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length) |
| 324 | { |
349 | { |
| 325 | unsigned long raw_bit_value = bitset.Read(start_bit, bit_length); |
350 | unsigned long raw_bit_value = bitset.Read(start_bit, bit_length); |
| 326 | 351 | ||
| 327 | //LOG.Debug("DecodeUint: raw_bit_value=" + boost::lexical_cast<std::string>(raw_bit_value)); |
352 | //LOG.Debug("DecodeUint: raw_bit_value=" + boost::lexical_cast<std::string>(raw_bit_value)); |
| 328 | 353 | ||
| 329 | return boost::lexical_cast<std::string>((unsigned int)raw_bit_value); |
354 | return boost::lexical_cast<std::string>((unsigned int)raw_bit_value); |
| 330 | } |
355 | } |
| 331 | 356 | ||
| 332 | void Protocol::EncodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value) |
357 | void Protocol::EncodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value) |
| 333 | { |
358 | { |
| Line 336... | Line 361... | ||
| 336 | bitset.Write(start_bit, bit_length, raw_bit_value); |
361 | bitset.Write(start_bit, bit_length, raw_bit_value); |
| 337 | } |
362 | } |
| 338 | 363 | ||
| 339 | std::string Protocol::DecodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length) |
364 | std::string Protocol::DecodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length) |
| 340 | { |
365 | { |
| 341 | float float_value = boost::lexical_cast<float>(this->DecodeInt(bitset, start_bit, bit_length)) |
366 | float float_value = boost::lexical_cast<float>(this->DecodeInt(bitset, start_bit, bit_length)); |
| - | 367 | LOG.Debug("DecodeFloat::float_value1=" + boost::lexical_cast<std::string>(float_value)); |
|
| - | 368 | ||
| - | 369 | ||
| - | 370 | float_value = float_value / 64.0f; |
|
| - | 371 | ||
| - | 372 | LOG.Debug("DecodeFloat::float_value2=" + boost::lexical_cast<std::string>(float_value)); |
|
| 342 | 373 | ||
| 343 | return boost::lexical_cast<std::string>(float_value); |
374 | return boost::lexical_cast<std::string>(float_value); |
| 344 | } |
375 | } |
| 345 | 376 | ||
| 346 | void Protocol::EncodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value) |
377 | void Protocol::EncodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value) |