Re: Get ASCII value for character when higher than 127



You're comparing a standard encoding (UTF-8), capable of storing *any*
character, to a useless encoding of your own choosing. What will you do
with a password containing Chinese characters? UTF-8 will handle it.

Stop trying to evaluate the stored data based on your expectations (should
be), and start evaluating it based on your requirements (should do). Can it
be decoded back to the original password? Does it store the password
efficiently? With UTF-8, the answer is yes and yes. Do you have a
requirement for compatibility with some other software? If so, you need to
tell us that.


<ssetz@xxxxxx> wrote in message
news:1180094193.382198.13330@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On 24 mei, 17:14, "Ben Voigt" <r...@xxxxxxxxxxxxx> wrote:
Instead of wcstombs, use WideCharToMultiByte and CP_UTF8

http://msdn2.microsoft.com/en-us/library/ms776420.aspx

Also write the UTF byte order mark to the beginning of the file, so it
will
be decoded correctly by other programs (eg Notepad)

Thanks, this helped me further a bit. But I'm still not able to get
the correct int value for the special characters. For example, when I
reset a users password to the following:

éAbc1fëp$%^

The int values that are written to my textfile for the password file
are:

0-61-0-87-0065-0098-0099-0049-0-58--110-0-61-0-85-0112-

And this should be:

0130-0065-0098-0099-0049-0159-0137-0112-0036-0037-0094-

Any idea what it is I'm still doing wrong? My code now looks like
below.

Thanks again,
Sandra

=========================================================

#include <windows.h>
#include <ntsecapi.h>
#include <time.h>
#include <fstream>
#include <iostream>
#include "PwdHookNew.h"
#include <sstream>
#include <string>
#include <iomanip>
#include <lm.h>

using namespace std;

#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif

string GetASCIIString(string oristring)
{
bool test = true;
int i, k;
string numstrings;

ostringstream oss;
for(i=0;i<oristring.size();i++)
{
k = int(oristring[i]);
oss << setw(4) << setfill('0') << k << '-';
}
numstrings=oss.str();
oss.clear();

return numstrings;
}

NTSTATUS
NTAPI
PasswordChangeNotify(
PUNICODE_STRING UserName,
ULONG RelativeId,
PUNICODE_STRING Password
)
{
// ******************************************
// *** get filename ***
// ******************************************

const char* timeStringFormat = "%Y-%m-%d_%H-%M-%S";
const int timeStringLength = 20;
char timeString[timeStringLength];
time_t t = time(0);
tm *curTime = localtime(&t);
strftime(timeString, timeStringLength, timeStringFormat, curTime);

char path[80];
strcpy (path,"C:\\pwds\\");
strcat (path,timeString);
strcat (path,".txt");

// *******************************
// *** get pwd and user string ***
// *******************************

char *usernameStr, *passwordStr;

usernameStr = (char*)calloc(1, (UserName->Length/2)+1);
passwordStr = (char*)calloc(1, (Password->Length/2)+1);

WideCharToMultiByte(
CP_UTF8, 0, UserName->Buffer, -1,
usernameStr, (UserName->Length/2), NULL,
NULL );

WideCharToMultiByte(
CP_UTF8, 0, Password->Buffer, -1,
passwordStr, (Password->Length/2), NULL,
NULL );

char xmlmsg[200];
strcpy (xmlmsg,"<userpwd><username>");
strcat (xmlmsg,usernameStr);
strcat (xmlmsg,"</username><password>");
strcat (xmlmsg,passwordStr);
strcat (xmlmsg,"</password></userpwd>");

string asciiString = GetASCIIString(xmlmsg);

// ********************
// *** write output ***
// ********************

fstream outPwd(path, ios::app);
if (!outPwd)
{
fstream outPwd(path, ios::out );
}

outPwd << asciiString;

outPwd.close();

return STATUS_SUCCESS;
}


.



Relevant Pages

  • Re: Get ASCII value for character when higher than 127
    ... The reason I want to store the int-values for the characters in stead ... I also imagined, that if I have the int value, I can perform some ... char timeString; ... strcat; ...
    (microsoft.public.vc.language)
  • Re: Get ASCII value for character when higher than 127
    ... The reason I want to store the int-values for the characters in stead ... I also imagined, that if I have the int value, I can perform some ... char timeString; ... strcat; ...
    (microsoft.public.vc.language)
  • Re: UTF of Java strings?
    ... If the size of char were undefined, and char was not convertible to any ... integer type, I don't see why the Unicode change would have caused any ... non-16-byte characters were introduced, etc. ... Code that pawed through UTF-8 ...
    (comp.lang.java.programmer)
  • Re: How to socket and utf-8?
    ... The type char is merely a small integer, ... _characters_ and some _integers_. ... Since the integers of the ASCII ... character X encoded in UTF-8. ...
    (comp.unix.programmer)
  • Re: Forth 200x, S\q
    ... and that where characters are larger than 1 byte, ... There are a number of options what \xHH means in a Unicode Forth: ... It means a char ... chars with \x that would be illegal as UTF-8 encoded Unicode ...
    (comp.lang.forth)