Как набрать OMstring на символе *

Я использую Rhapsody OMString, и мой код должен типизировать OMstring в char *

 reader.readStream((unsigned char *)MachineType,machineTypeDataSize);  // MachineType is OMString

Можно ли привести OMString к char *

1 ответ

Решение

Если вы посмотрите на документацию ( http://pic.dhe.ibm.com/infocenter/rhaphlp/v7r6/index.jsp?topic=%2Fcom.ibm.rhp.frameworks.doc%2Ftopics%2Frhp_r_fw_omstring_class.html), вы всегда можно использовать operator [], чтобы создать себе небольшую служебную функцию, которая преобразует объект OMString в std:: string, а затем использует метод cdstr() std:: string, чтобы получить его const char* content:

#include <string>
#include <omstring.h>

    std::string omStringToStdString( const OMString& in )
    {
        std::string result( in.GetLength(), '\0' );

        for ( std::string::size_type i = 0; i < result.length(); ++i )
        {
            result[ i ] = in[ i ];
        }

        return result;
    }

РЕДАКТИРОВАТЬ: Очевидно, OMString имеет оператор *, который возвращает const char * указатель на содержимое строки: ( http://pic.dhe.ibm.com/infocenter/rhaphlp/v7r6/index.jsp?topic=%2Fcom.ibm.rhp.frameworks.doc%2Ftopics%2Frhp_r_fw_operator_customize.html), поэтому вам на самом деле не нужна функция конвертации, которую я разместил выше.

РЕДАКТИРОВАТЬ #2: Хорошо, перечитывая вопрос OP, у меня теперь создается впечатление, что он не хочет читать из строки OMS, но писать в одну. В этом случае метод OMString::GetBuffer() предоставляет вам прямой доступ к внутреннему буферу объекта. Будьте осторожны, однако, вы можете легко повредить внутреннее состояние объекта OMString, если напишите больше символов, чем в буфере есть место (и, возможно, если вы вставите символы \0 до фактического конца буфера).

Другие вопросы по тегам