如何将OMstring强制转换为char *

时间:2014-10-13 07:21:13

标签: c++ rhapsody

我正在使用Rhapsody OMString,我的代码需要将OMstring类型转换为char *

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

是否可以将OMString类型转换为char *

1 个答案:

答案 0 :(得分:0)

如果你查看文档(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,然后使用std :: string的c_str ()方法获取它的const char *内容:

#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的问题时,我现在得到的印象是他不想从OMString读取而是写入一个。在这种情况下,OMString :: GetBuffer()方法使您可以直接访问对象的内部缓冲区。但是要小心,如果你写的字符多于缓冲区有空格的字符(如果你在缓冲区的实际结尾之前插入\ 0字符),你很容易就会破坏OMString对象的内部状态。