Есть ли тип AnsiString(65001)
в C++, как есть в Delphi? Я хотел бы использовать его для взаимодействия между приложением и DLL.AnsiString в C++?
ответ
В C++ Builder конкретно (который использует тот же RTL как Delphi), есть AnsiStringT
шаблонный класс, который обеспечивает ту же функциональность как AnsiString(N)
типа в Delphi:
template <unsigned short CP>
class RTL_DELPHIRETURN AnsiStringT : public AnsiStringBase
Где CP
является желаемой кодовой страницы.
В РТЛ в UTF8String
и RawByteString
типы просто псевдонимы для этой функции:
Delphi:
type
UTF8String = type AnsiString(65001);
RawByteString = type AnsiString($ffff);
C++ Builder:
typedef AnsiStringT<65001> UTF8String;
typedef AnsiStringT<65535> RawByteString;
И 'Visual C++'? –
В других компиляторах C++ такой эквивалентной функциональности нет. Вы должны использовать явные преобразования в своем коде через 'MultiByteToWideChar()'/'WideCharToMultiByte()', 'std :: codecvt' и т. Д. (Которые вы могли бы использовать для написания собственного класса обертки типа AnsiStringT, если это необходимо). –
Мне нужно будет перенести «AnsiString» на «Visual C++», затем :) –
std::string
гарантированно выступать в качестве контейнера char
с, а char
гарантированно будет ровно 1 байт, который, кажется, соответствует описанию в AnsiString.
Обратите внимание, что вы всегда можете заставить несколько многобайтовых символов Юникода в std :: string, если вы действительно этого хотите, нет никакой принудительной гарантии, чтобы каждый логический символ был закодирован 1 байт. Нет простого способа обеспечить выполнение этого в C++, не написав собственный класс.
Для взаимодействия, вы можете использовать raw cstring (char*
).
- 1. C Builder (C++) AnsiString Метод длины
- 2. C++ Builder:?. Преобразование двоичного кода в AnsiString
- 3. AnsiString Стрит
- 4. Удаление Чара в AnsiString
- 5. Conversion - ошибка E2015, неоднозначность между AnsiString (полукокса) и AnsiString (короткий)
- 6. Delphi Неиспользуемый идентификатор ansistring
- 7. Как нарисовать AnsiString для char?
- 8. Прочитайте файл в Pascal AnsiString эффективно
- 9. AnsiString по умолчанию для строки типа в Embarcadero C++ Builder?
- 10. Преобразование C++ Builder AnsiString в std :: string через boost :: lexical_cast
- 11. Правильные преобразования байт из C++ в Дельфы AnsiString
- 12. Что происходит, когда AnsiString передается в PAnsiString?
- 13. Самый быстрый способ сравнить AnsiString
- 14. AnsiString, усеченный с большим пространством
- 15. COM-сервер Параметры AnsiString в Delphi 2009
- 16. Как преобразовать строку Unicode в AnsiString?
- 17. C++ Builder AnsiString удалить все кроме арматуры < ... >
- 18. Определения: AnsiString, WideString, String, Char [], символ *, BSTR,
- 19. Как использовать AnsiString для хранения двоичных данных?
- 20. Ошибка Delphi: получил «нетипизированный», ожидаемый «AnsiString»
- 21. FailNotEquals ожидает, что AnsiString как второй параметр
- 22. Delphi AnsiString Manipulation - PAnsiChar становится коррумпированным?
- 23. Нет сопоставления из типа DB AnsiString в известный сервер sql
- 24. Преобразование целочисленного значения в AnsiString в Delphi 2009
- 25. Delphi: преобразовать TByte в соответствующее значение Hex в AnsiString
- 26. Как преобразовать AnsiString в UnicodeString в Delphi xe4
- 27. Как преобразовать AnsiString в Integer в современных Delphi?
- 28. Использование AnsiString как байт массива в Delphi XE4
- 29. Как преобразовать строку с завершающим нулем в AnsiString?
- 30. Включая DShow.h breaks VCL AnsiString :: sprintf() на BDS2006
Я предполагаю, что означает строку Узкие-символов в кодировке Windows 65001, которая является плохо поддерживаемой кодовой страницей UTF-8. Просто используйте 'std :: string' и помните, что это UTF-8. – Deduplicator
@Deduplicator Вы уверены? http://pastebin.com/siaV0ytN –
@JohnLewis не уверен, что вы просите, но ваш фрагмент работает отлично: http://ideone.com/d5ZAwC – tux3