-6

I found this code for convert string to pdu (septet to octet char)

#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>

std::string toPDU(const std::string &original)
// Converts an ANSI string to PDU format
{
  if (original.empty()) {
    // Empty string -> nothing to do
    return original;
  }
  std::string result;
  // Reserve enough space to hold all characters
  result.reserve((original.length() * 7 + 7) / 8);
  // Variables for holding the current amount of bits to copy from the next character
  size_t bitshift = 1, mask = 0x01;
  unsigned char curr = original&#091;0&#093;;  //->> ERROR !!!!!!!!!!!!!!!!!
  for (size_t i = 1; i < original.length(); ++i) {
    if (bitshift != 0) {
      // If bitshift is 0, then curr will be 0, so in effect we should skip a character
      // So only do the following when bitshift different from 0

      // Add the low bits (using the mask) to the left of the current character
      curr += (static_cast<unsigned char>(original&#091;i&#093;) & mask) << (8 - bitshift);
      result += curr;
    }
    // Remember the remaining bits of this character so that we can add them later
    curr = (original&#091;i&#093; & ~mask) >> bitshift;
    // Cycle bitshift through 0-7 (could also be written as bitshift = (bitshift + 1) mod 8)
    bitshift = (bitshift + 1) & 0x7;
    // Set the mask to have all bitshift lower bits set
    // e.g. bitshift = 3, then mask = 0x07
    // bitshift = 5, then mask = 0x1F
    // bitshift = 7, then mask = 0x7F
    mask = (1 << bitshift) - 1;
  }
  result += curr;
  return result;
}

std::string toHEX(const std::string &original)
// Converts a string to the hexadecimal representation of its characters
{
  std::ostringstream os;
  os << std::hex << std::uppercase;
  for (size_t i = 0; i < original.length(); ++i) {
    os << static_cast<unsigned int>(static_cast<unsigned char>(original&#091;i&#093;)) << " ";
  }
  return os.str();
}

int main()
{
  using namespace std;
  cout << toHEX(toPDU("hellohello")) << endl;
  return 0;
}

And got this error at visual studio 2012 :

error C2014: preprocessor command must start as first nonwhite space

I am new with c++, anyone can explain why this error happen ? Thanks.

1 Answers1

5

This is probably "HTML encoding gone wrong"

 original&#091;0&#093;;

should be

 original[0];

Same in other places where you have &#.

Decoding can be found here:

http://www.ascii.cl/htmlcodes.htm

Mats Petersson
  • 126,704
  • 14
  • 140
  • 227
  • Good catch...so maybe he copied the code from the web or some place with characters encoding inconsistency. – Ken D Jun 02 '13 at 07:23
  • 1
    Yes, I suspect it's been "encoded" twice, or some such. Or it's been posted on a phpBB forum as "code", and then scraped by some automated software, or some other "mangling". – Mats Petersson Jun 02 '13 at 07:25