Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Проблема с конвертацией строк на С++

Ответить
Настройки темы
Проблема с конвертацией строк на С++

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Привет всем!

Есть такой блок:

char* ts = new char[100];
memset(ts, 0, sizeof(ts));
StrPCopy(ts, edMyText->Text);
// здесь ts имеет правильное значение "T-XP1"
LPWSTR ss = (LPWSTR)ts;
// здесь ss имеет значение "\x2D54\x50581"

Обьясните, плиз, в чем дело?
Почему ss не равно "T-XP1"?

Отправлено: 15:25, 15-02-2005

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Потому что ss - это указатель.

Отправлено: 15:34, 15-02-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Тогда скажите, плиз, как мне сделать так, чтобы сей указатель указывал на правильное значение? Что нужно создать и как туда нужно переконвертить?

Отправлено: 15:40, 15-02-2005 | #3


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


ss - указатель. Его значение всегда в шестнадцатеричном виде будет давать не-пойми-что. Другое дело - содержимое памяти по этому адресу. А Вы так и не сказали, чем смотрите это самое содержимое (... памяти по адресу, который хранится в указателе ss). printf? wprintf? SetWindowText?
Посмотрите тут по поводу _типов_ указателей (и слева там в меню пощелкайте).
Для перевода _содержимого_ одних строк в другие: тут.

Отправлено: 15:55, 15-02-2005 | #4


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо

Отправлено: 16:05, 15-02-2005 | #5


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Kelasant
Цитата:
// здесь ss имеет значение "\x2D54\x50581"
LPWSTR - это строка "широких" символов (Wide char STR). А поскольку начертаний "широких" символов с такими кодами в системе нет, строка выводится в шестнадцатеричных СЛОВАХ. \x2D54 - эквивалентна "обычной" строке "T-", т.к. '\x54' есть символ 'T', а '\x2D' -- соответственно '-'. Второе слово даст тебе "XP". Ну а 1 в конце от того, что размер "широкого" символа равен 2 байтам, а в строке остался один байт, естественно код отобразился как обычный символ. А произошло это из-за неправильного приведения. Строка скопировалась посимвольно без преобразования "обычных" символов в "широкие". Вместо
Цитата:
LPWSTR ss = (LPWSTR)ts;
нужно
Код: Выделить весь код
LPWSTR ss = LPWSTR (ts);
и произойдет не приведения, а преобразование типа.

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 16:31, 18-02-2005 | #6


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да, спасибо, я понял

Отправлено: 21:27, 18-02-2005 | #7


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


А я ни фига не понял. в первый раз в жизни вижу такое:
Цитата:
нужно
Код:
LPWSTR ss = LPWSTR (ts);
shurikan, Вы где такое взяли? Можно и мне почитать?

LPWSTR - тип данных - указатель. Pointer to a null-terminated string of 16-bit Unicode characters.
Хотя речь идёт о С++ (сабж), "явное преобразование типа" LPSTR в LPWSTR даст банальное "приведение типа" LPSTR к LPWSTR, никакой разницы. Содержимое памяти не превратится от этого некоим волшебным образом из CHAR в WCHAR.


PS. Кстати, тут ошибка:
char* ts = new char[100];
memset(ts, 0, sizeof(ts));

Отправлено: 23:32, 18-02-2005 | #8


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я еще 15-го числа понял свои ошибки при конвертации. Дальше обьяснять не надо, спасибо - уже все работало в тот же день

hasherfrog, а где тут ошибка? Может, я не к месту использую sizeof ?

P.S. Мне тоже стало интересно насчет
Цитата:
LPWSTR ss = LPWSTR (ts);
. Но, будучи не очень силен в С++, я лишь поблагодарил за помощь

Отправлено: 21:06, 19-02-2005 | #9


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Нужно
memset(ts, 0, sizeof(char)*100);
Ну если короче, то
memset(ts, 0, 100);

А у Вас
memset(ts, 0, sizeof(ts));
даст
memset(ts, 0, sizeof(char*));
т.е.
memset(ts, 0, 4);

Отправлено: 02:33, 20-02-2005 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Проблема с конвертацией строк на С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Группировка строк в экселе pva Программирование и базы данных 6 16-04-2009 12:41
Разное - количество строк WinXP Abracadabra Хочу все знать 7 11-02-2008 23:05
Сравнение строк в PHP Dutchman Mihel Вебмастеру 8 06-07-2004 13:04
Проблема с конвертацией закладок Opera 7.0 в IE 6.0 AlexCom Хочу все знать 1 27-06-2004 21:31
Проблема с конвертацией музыкальных CD в формат mp3 Meister Непонятные проблемы с Железом 11 18-08-2002 02:59




 
Переход