Example #1
0
void hexStringToBytes(unsigned char* srcData, unsigned char* destData, uint32_t hexDigits)
	{
	lassert(hexDigits % 2 == 0);

	for (long k = 0; k < hexDigits;k += 2)
		destData[k/2] = hexCharValue(srcData[k]) * 16 + hexCharValue(srcData[k+1]);
	}
Example #2
0
// read string at file pos
bool
CJson::
readString(CStrParse &parse, std::string &str1)
{
  if (! parse.isChar('\"'))
    return false;

  parse.skipChar();

  while (! parse.eof()) {
    if      (parse.isChar('\\') && ! parse.neof(1)) {
      parse.skipChar();

      char c = parse.readChar();

      switch (c) {
        case '\"': str1 += '\"'; break;
        case '\\': str1 += '\\'; break;
        case '/' : str1 += '/' ; break;
        case 'b' : str1 += '\b'; break;
        case 'f' : str1 += '\f'; break;
        case 'n' : str1 += '\n'; break;
        case 'r' : str1 += '\r'; break;
        case 't' : str1 += '\t'; break;
        case 'u' : {
          // 4 hexadecimal digits
          long i = 0;

          for (int j = 0; j < 4; ++j) {
            if (! parse.isXDigit())
              return false;

            char c = parse.readChar();

            i = (i << 4) | (hexCharValue(c) & 0xF);
          }

          CUtf8::append(str1, i);

          break;
        }
        default: {
          if (isStrict())
            return false;

          str1 += c;

          break;
        }
      }
    }
    else if (parse.isChar('\"'))
      break;
    else
      str1 += parse.readChar();
  }

  if (parse.eof() || ! parse.isChar('\"'))
    return false;

  parse.skipChar();

  return true;
}