Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Конвертация String и char

19.02.2012, 12:49. Показов 4439. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добро!
Проблема с конвертацией String и char, а именно вот таким способом я получаю индекс диска например диск "F" :
C++
1
2
3
String MSGSTR;
Label1->Caption =(MSGSTR+
  DWORDtoDiskNames(((PDEV_BROADCAST_VOLUME)message.LParam)->dbcv_unitmask));
здесь все нормально работает!

теперь я пытаюсь выудить о нем информацию:
C++
1
2
3
4
5
6
7
8
9
10
TCHAR volumeName[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;
if (GetVolumeInformation(
    "I:\\",    // здесь вместо "I" хочу поместить Label1->Caption или (MSGSTR+DWORDtoDiskNames.....(((PDE
           volumeName,ARRAYSIZE(volumeName),
    &serialNumber,&maxComponentLen,&fileSystemFlags,fileSystemName,
    ARRAYSIZE(fileSystemName))){Label2->Caption = (serialNumber);}
Пробовал по всякому но не смог догнать как подсунуть правильно...посоветуйте как осуществить.

Добавлено через 2 часа 42 минуты
Конвертацию или можно сказать преобразование сделал так:
C++
1
char ch2 = Edit5->Text[1];
И попробовал подсунуть ch2 сюда:
C++
1
2
3
4
5
if (GetVolumeInformation(
        ch2+":\\",    // здесь вместо "I" поместил char ch2 
           volumeName,ARRAYSIZE(volumeName),
        &serialNumber,&maxComponentLen,&fileSystemFlags,fileSystemName,
        ARRAYSIZE(fileSystemName))){Label2->Caption = (serialNumber);}
Компилятор пропустил но в Label2 тишина...

Добавлено через 15 минут
Уще так тоже компилируется а в Label2 не выводится инфа...
C++
1
2
3
4
5
6
7
8
9
10
if (GetVolumeInformation(
    Edit5->Text[1]+":\\",
    volumeName,
    ARRAYSIZE(volumeName),
    &serialNumber,
    &maxComponentLen,
    &fileSystemFlags,
    fileSystemName,
    ARRAYSIZE(fileSystemName))){
Label2->Caption = (serialNumber);}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2012, 12:49
Ответы с готовыми решениями:

Конвертация Char в unicode
Допустим есть сторка "Привет Мир!" Как эту строку переконвертировать в unicode? Я так понимаю что можно считать строку и разбить...

Конвертация из unsigned char в AnsiString
Приветствую всех. У меня возникла проблемка такая, в проге я работают с unsigned char, но так же мне надо отображать эти же строки в поле...

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

27
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.02.2012, 13:27
C++
1
char *ch2 = Edit5->Text[1];
1
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 13:28
А нужно только серийник выудить ?

Можно попробовать так

C++
1
if(GetVolumeInformation (L"C:\\",NULL,NULL,&serialNumber,NULL,NULL,NULL,NULL))
L перед "C:\\" для RAD Studio нужно
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.02.2012, 13:28
Edit5->Text[1]
- это что и откуда взялось ?
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.02.2012, 13:40  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
- это что и откуда взялось ?
Я почитал и заметил что с Edita легче перевести в char.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 13:40
LK,

C++
1
Edit5->Text[1]
- это 1-й символ из последовательности

Вроде так
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.02.2012, 13:45  [ТС]
Цитата Сообщение от Kabak Посмотреть сообщение
А нужно только серийник выудить ?
Да только серийник.
твой код не компилится пока буду смотреть как и что...

Добавлено через 1 минуту
У меня проблема только с этим:
C++
1
2
3
4
5
if (GetVolumeInformation(
        "I:\\",    // здесь вместо "I" хочу поместить Edit5->Text 
           volumeName,ARRAYSIZE(volumeName),
        &serialNumber,&maxComponentLen,&fileSystemFlags,fileSystemName,
        ARRAYSIZE(fileSystemName))){Label2->Caption = (serialNumber);}
а в Edite у меня уже есть индекс диска!
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 13:46
Цитата Сообщение от Samrisbe Посмотреть сообщение
Да только серийник.
твой код не компилится пока буду смотреть как и что...
Я только что его откомпилировал и он работает в RAD Studio XE2

Label2->Caption = (serialNumber) высвечивает серийник

L перед "C:\\" для RAD Studio нужно. Для Builder 6 не нужно
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.02.2012, 13:50  [ТС]
У меня Rad Studio 2010.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 13:51
Возможно какой-то из параметров указанный вами в GetVolumeInformation заставляет функцию возвращать неверные данные. Я и предлагаю заменить всё на NULL и оставить только &serialNumber

Во всяком случае я пользую для получения серийного номера именно такой вариант как указал - с NULL в параметрах кроме серийника
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.02.2012, 13:58  [ТС]
Так мне не диска с:\\ нужен серийник а Диска индекс которого записан в Edit5 например ("F")
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 14:03
Цитата Сообщение от Samrisbe Посмотреть сообщение
Так мне не диска с:\\ нужен серийник а Диска индекс которого записан в Edit5 например ("F")
А почему Edit5->Text[1] , а не Edit5->Text[0] ?

Edit5->Text[1] = ':' вроде бы... ну, если конечно впереди пробелов нет
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.02.2012, 14:33  [ТС]
Цитата Сообщение от Kabak Посмотреть сообщение
А почему Edit5->Text[1] , а не Edit5->Text[0] ?
Тогда выдает сообщение Range check error!
А в Edite у меня только один символ это индекс диска "F".
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 14:49
Хорошо, а если явно задать

C++
1
if(GetVolumeInformation (L"F:\\",NULL,NULL,&serialNumber,NULL,NULL,NULL,NULL))
Работает у вас ?
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.02.2012, 14:50
Цитата Сообщение от Kabak Посмотреть сообщение
А почему Edit5->Text[1] , а не Edit5->Text[0] ?
потому что в строке нумерация символов начинается с 1, т.е., индекс первого символа в строке - 1.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.02.2012, 15:06  [ТС]
Цитата Сообщение от Kabak Посмотреть сообщение
Работает у вас ?
Нет.
Вот так работает:
C++
1
if (GetVolumeInformation("F:\\",volumeName,ARRAYSIZE(volumeName),&serialNumber,&maxComponentLen,&fileSystemFlags,fileSystemName,ARRAYSIZE fileSystemName)))
А мне надо чтоб с Edita брал с какого диска считать серийный номер.

Добавлено через 5 минут
Както так нельзя сделать?
C++
1
2
3
4
5
6
DWORD serialNumber = 0;
 
if (GetVolumeInformation("Edit5->Text",serialNumber))
{
Label1->Caption = (serialNumber);
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.02.2012, 15:13
Samrisbe,вот так пробуйте (у меня это компилируется, но при работе ошибка... )__
C++
1
2
3
4
    const char ch2[] = { char(Edit1->Text[1]),':',0,0 } ;
 
      (GetVolumeInformation(
          ch2 ,   //  RootPathName
1
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 15:33
У меня работает , попробуйте

C++
1
2
3
4
5
6
7
8
9
 wchar_t *PathName;
 PathName = new wchar_t[50];
 
wcscpy (PathName,Edit2->Text.c_str());
wcscat (PathName,L":\\");
 
if(GetVolumeInformation (PathName,NULL,NULL,&serialnumber,NULL,NULL,NULL,NULL))
 
delete []  PathName;
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.02.2012, 16:05  [ТС]
Цитата Сообщение от Kabak Посмотреть сообщение
У меня работает , попробуйте
Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wchar_t *PathName;
 PathName = new wchar_t[50];
 
wcscpy (PathName,Edit5->Text.c_str());
wcscat (PathName,L":\\");
 
TCHAR volumename[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;
 
if(GetVolumeInformation (PathName,NULL,NULL,&serialnumber,NULL,NULL,NULL,NULL))
{ Label1->Caption = (serialnumber);}
delete []  PathName;
вот ошибки:
C++
1
2
[BCC32 Error] Unit1.cpp(1139): E2034 Cannot convert 'wchar_t *' to 'const char *'
[BCC32 Error] Unit1.cpp(1139): E2342 Type mismatch in parameter 'lpRootPathName' (wanted 'const char *', got 'wchar_t *')
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.02.2012, 16:09
может, у тебя билдер не дрессированный, напиши ему просто
C++
1
char
и
C++
1
strcpy
,
C++
1
strcat
.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2012, 16:09
Помогаю со студенческими работами здесь

Конвертация UnicodeString в абстрактный const char
Всем доброе время суток. Недавно начал "знакомство" с RAD XE. И сейчас возникли проблемы с юникодом. Нужно конвектировать UnicodeString в...

Конвертация String в BYTE
Всем привет! Столкнулся с проблемой конвертации с String в BYTE. Если кто-то знает как правильно конвертнуть, буду очень благодарен!)

String в char
#include <cstring> int n, flag; FILE *f; char s="PC.dat"; struct PC{ int Num; char tip; int taktch; int OZU; int...

Из char* в String
Кто знает способ как из char* сделать String??? есть некая функция char *MoneyToStr(int m); она создает строку (выделяет под нее...

Преобразовать String в char*
Добрый день! Подскажите пожалуйста, как можно преобразовать тип char? А именно: Есть строка кода char* X="Текст в виде пути на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru