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

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

19.02.2012, 12:49. Показов 4390. Ответов 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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru