0

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

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

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

4

1 回答 1

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 有一个 operator* 返回一个指向字符串内容的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 对象的内部状态。

于 2014-10-13T09:09:22.770 回答