Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663

Cannot convert 'unsigned char *' to 'UnicodeString'

08.05.2015, 10:26. Показов 4660. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть код
C++
1
2
UCHAR *sstr1=0;
SG1->Cells[colNumb ][(*RowNumb)+1]   = ReverseString(sstr1);
пишет ошибку
E2034 Cannot convert 'unsigned char *' to 'UnicodeString'
E2342 Type mismatch in parameter 'AText' (wanted 'const UnicodeString', got 'unsigned char *')
Как конвертировать? Или по другому решается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.05.2015, 10:26
Ответы с готовыми решениями:

const unsigned char to unicodestring
Здравствуйте! Пишу небольшую программу с использованием sqlite. В результате запроса получаем данные типа: const unsigned char*. Что бы...

Конвертация unsigned char* в UnicodeString
Есть строка, которая приходит чрез СОМ порт в формате unsiged char, мне ее надо записать в edit, я делаю так: Edit->Text =...

WinExec: Cannot convert 'UnicodeString' to 'const char *'
Ребят извеняюсь если была такая тема но я поиском не нашел,а в гугле не понял Есть едит в него вбивается путь файла что то вроде...

22
43 / 43 / 12
Регистрация: 06.10.2014
Сообщений: 135
08.05.2015, 10:42
Вам вообще в раздел C++ Builder с таким вопросом нужно было обратиться.
UCHAR - unsigned char
sstr1 - указатель на unsigned char, причем равный NULL.
И спрашивается, что вы с нулевым указателем хотели здесь сделать ReverseString(sstr1)?
предполагаю, что вместо UCHAR *sstr1=0 нужно было использовать String sstr1
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.05.2015, 10:44
В функцию передавай UnicodeString. У тебя sstr1 вообще пустой указатель. Что получить ожидаешь?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
08.05.2015, 10:52  [ТС]
Вот так будет правильней. sstr после объявления заполняется.
C++
1
2
3
4
5
6
UCHAR *sstr1=0;
if(Form1->LNETAdr)
       {
         sstr1 = &pm.LC485[Form1->LNETAdr-1].rs485Txt[32][0];// Это к примеру. 
           }
SG1->Cells[colNumb ][(*RowNumb)+1]   = ReverseString(sstr1);
0
43 / 43 / 12
Регистрация: 06.10.2014
Сообщений: 135
08.05.2015, 10:56
Что возвращает rs485Txt? Какой тип?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
08.05.2015, 11:06  [ТС]
Кстати, не обязательно делать реверс. просто занести в ячейку sstr1

Добавлено через 58 секунд
Цитата Сообщение от ViktorB Посмотреть сообщение
Что возвращает rs485Txt? Какой тип?
UCHAR rs485Txt[33][32] ;

Раньше заполняло в ячейки по одному символу - нужно в одну ячейку строкой.

Добавлено через 8 минут
DecodeCharToUnicode(sstr1,len);
EncodeUnicodeToChar(S,sstr1,len);
Не работает, все виснет
0
43 / 43 / 12
Регистрация: 06.10.2014
Сообщений: 135
08.05.2015, 23:48
Я не силен в Delphi. Я говорю, что в вам в раздел C++ Builder с таким вопросом нужно обратиться.
А ячейка SG1->Cellsх[][] принимает String?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
09.05.2015, 00:03  [ТС]
Цитата Сообщение от ViktorB Посмотреть сообщение
Я не силен в Delphi. Я говорю, что в вам в раздел C++ Builder с таким вопросом нужно обратиться.
Вроде уже туда и перенесли.
Цитата Сообщение от ViktorB Посмотреть сообщение
А ячейка SG1->Cellsх[][] принимает String?
да. вот так. SG1->Cells[colNumb ][(*RowNumb)+1] = s1.c_str());
наверное как то так надо
String s1;
s1 = (char*) sstr1;
но не факт..есть сомнения.
0
43 / 43 / 12
Регистрация: 06.10.2014
Сообщений: 135
09.05.2015, 00:23
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Вроде уже туда и перенесли.
Не обратил внимания.
Вроде бы String может быть как UnicodeStirng так и AnsiString (от настройки проекта зависит, как, например, #define _UNICODE)
Цитата Сообщение от Sergey_03 Посмотреть сообщение
да. вот так. SG1->Cells[colNumb ][(*RowNumb)+1] = s1.c_str());
Опять таки, что такое s1 (char или wchar_t)?
Я говорю вам используйте вместо UCHAR *sstr1=0; -> String sstr1;

Добавлено через 5 минут
Цитата Сообщение от Sergey_03 Посмотреть сообщение
наверное как то так надо
String s1;
s1 = (char*) sstr1;
Так точно не надо
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
12.05.2015, 16:46  [ТС]
Цитата Сообщение от ViktorB Посмотреть сообщение
что такое s1 (char или wchar_t)?
String s1;
Цитата Сообщение от ViktorB Посмотреть сообщение
вместо UCHAR *sstr1=0; -> String sstr1;
Никак не получится. Вся программа на UCHAR , а для новой функции контейнер для wchar_t, а не для unsigned char
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
12.05.2015, 17:05
Цитата Сообщение от ViktorB Посмотреть сообщение
Так точно не надо
почему?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
13.05.2015, 09:18
Цитата Сообщение от kzru_hunter Посмотреть сообщение
почему?
Зачем кастовать, когда у String есть метод получения указателя на данные?
Но да, хотелось бы получить объяснения ViktorB.
1
43 / 43 / 12
Регистрация: 06.10.2014
Сообщений: 135
14.05.2015, 16:13
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Но да, хотелось бы получить объяснения ViktorB.
Первоначально sstr1 это UCHAR*. String может быть WideString, UnicodeString, AnsiString, ShortString. Простое приведение типа не должно работать в общем случае.
Если я не прав, то я буду рад избавиться от заблуждения.
2
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
14.05.2015, 17:15
Цитата Сообщение от ViktorB Посмотреть сообщение
Первоначально sstr1 это UCHAR*. String может быть WideString, UnicodeString, AnsiString, ShortString. Простое приведение типа не должно работать в общем случае.
В ранних версиях билдера:
typedef AnsiString String; //
Начиная с C++ Builder 2009:
typedef UnicodeString String; //

Значения ячеек StringGrida имеют тип String. Это может быть AnsiString в C++ Builder 6 или UnicodeString C++ Builder 2009. AnsiString и UnicodeString умеют конструироваться от char*. Но т.к. sstr1 имеет тип UCHAR*(unsigned char*), то необходимо явное приведение в char*, которое никак не скажется на самих символах, т.к. один и тот же символ в char и UCHAR имеют один и тот же двоичный код.
1
43 / 43 / 12
Регистрация: 06.10.2014
Сообщений: 135
14.05.2015, 19:11
Цитата Сообщение от kzru_hunter Посмотреть сообщение
UnicodeString умеют конструироваться от char*
Это понятно. Но конструируется, видимо, используя текущую кодовую страницу (системы, пользователя, процесса или потока или еще чего-то там - не читал, но это тоже вопрос, интересно отражен ли он в документации), иначе как понять в какой unicode переводить char. Это, наверное, покрывает 90% случаев. Но отнюдь не универсально. И есть еще пара моментов менее относящихся к делу.

В общем я за то, что если используешь в приложении Си-строки, или std::string или еще какие-то, то нужно стараться делать это последовательно, придерживаясь чего-то одного. И в данном случае, я думаю, это было вполне реально.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
15.05.2015, 14:44  [ТС]
решил проблему набивкой стринга символами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String s; s=""; UCHAR *sstr1=0;
for(   ii=0;ii< 32; ii++)
              {
                                   mDevTxtOutputChar1[0]= *sstr1;
                   if(mDevTxtOutputChar1[0] != 0)
                   {
                      len =fConvAsnsiToWchar(mDevTxtOutputChar1,mDevTxtOutputWchar , 1, 0);
                      uOut="";  DevTxtInputStr=" ";
                      if(len > 1){len=1;}
                      if(len)
                      {
                        cpyWcharToUnicode(mDevTxtOutputWchar, DevTxtInputStr,len);
                      }
                                           s +=  DevTxtInputStr;
                   }
                         }
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
15.05.2015, 18:37
Цитата Сообщение от Sergey_03 Посмотреть сообщение
решил проблему набивкой стринга символами
получается, что sstr1 в ansi кодировке, тогда чем этот вариант не устраивает?
C++
1
StringGrid1->Cells[0][0] = Ansistrings::ReverseString((char*)sstr1);
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
15.05.2015, 18:47  [ТС]
Перед отправкой в ячейку грида мне нужно сделать преобразование s в функции, отправка в которую осуществляется -
std::wstring str1 = BiDiConverter::directConversion(s.w_str( ));
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
15.05.2015, 18:58
А std::wstring str1 и s каким боком? У вас же в начале темы используется unsigned char* sstr1.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
15.05.2015, 19:08  [ТС]
это новая функция. она сортирует символы в строке s. Без неё никак и без UCHAR *sstr1 никак.
С начала формируется массив UCHAR, потом в цикле перегоняется в string. string отправляется в BiDiConverter и после структура типа str1.c_str() загоняется в ячейку. str1 и sstr1 - разные вещи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2015, 19:08
Помогаю со студенческими работами здесь

E2034 Cannot convert 'Set<int,0,255>' to 'unsigned char *'
Unit1.cpp(32): E2034 Cannot convert 'Set&lt;int,0,255&gt;' to 'unsigned char *' выполнение операции #define Unit1__0 (System::Set&lt; int,...

Cannot convert 'UnicodeString'
Здравствуйте. Надо сохранить файл, имя файла беру из диалога сохранения: String filename; filename=SaveDialog1-&gt;FileName; Но...

Cannot convert 'string' to 'UnicodeString'
E2034 Cannot convert 'string' to 'UnicodeString' как вообще такое конвертировать?

Cannot convert 'UnicodeString' to 'wchar_t *
Ребят, подскажите, плиз, как склеить строки: AnsiString programpath = ExtractFilePath(Application-&gt;ExeName); ...

E2034 Cannot convert 'TStrings' to 'UnicodeString'
Добрый день :) Помогите понять что за ошибка TStrings *s; s-&gt;LoadFromFile(&quot;list.txt&quot;); for(int i=0; i &lt; s-&gt;Count; i++) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru