【问题标题】:ByteBuffer to String字节缓冲区到字符串
【发布时间】:2013-06-18 05:26:30
【问题描述】:

我在 Tizen 中开发了一个用于 Http 请求和响应的应用程序。我能够成功发布并获得回复。(检查身体长度)。 我得到的响应在 ByteBuffer 中。

ByteBuffer* pBuffer = pHttpResponse->ReadBodyN();

我在类型转换方面有点差。我希望将此 ByteBuffer 转换为字符串,以便我可以在 Label 中设置。

【问题讨论】:

  • ByteBuffer 是一个类?它有任何 getchar() 公共成员函数吗?
  • @NishithJainMR。不,它有 GetWChar。
  • 您是在寻找wstring 还是string? ByteBuffer 是用什么编码的?

标签: c++ string byte bytebuffer tizen


【解决方案1】:

ByteBuffer 中的数据是否以零结尾的 ASCII 码?在这种情况下,您可以像这样创建字符串:

String str((const char*)(byteBuf.GetPointer()));

否则你可以使用Tizen::Text::Encoding解码ByteBuffer,只要你知道编码是什么。例如:

// Construct some test data. In your case the buffer would come
// as a HTTP response.
char chars[] = "\xE5\xE6\xF6";  // æåø in ISO-8859-1
ByteBuffer byteBuf;
byteBuf.Construct((byte*)chars, 0, 3, 3);

Encoding* pEnc = Encoding::GetEncodingN(L"ISO-8859-1");
String str;
pEnc->GetString(byteBuf, 0, byteBuf.GetRemaining(), str);

Label *pLabel = static_cast<Label*>(GetControl(IDC_LABEL1));
pLabel->SetText(str);

【讨论】:

  • 如果数据是以零结尾的 ASCII 则有效,因此您得到的响应显然不符合该标准。你知道它的编码是什么吗?
  • 看起来它使用的是 8 位编码。不过,ByteBuffer 中可能没有零终止符。您可以将原始数组复制到另一个(更长的)数组并附加一个零终止符。或者您可以循环调用GetByte,并将每个字节附加到您的String
  • 嗨。你说的对。我正在使用另一个没有编码w3schools.com/xml/singlebyte1.xml 的链接。现在我可以使用循环将项目放入字节数组中
  • 但是,当我将字节设置为标签 _responseLabel.SetText(byteStorage);它在方形方框中打印。我不知道为什么它会这样打印,尽管 xml url 没有编码。你能帮我吗?
  • 不知道编码不知道怎么解决。但只要您知道编码,就可以使用Tizen::Text::Encoding 将数据解码为String。请参阅我的更新答案。
猜你喜欢
  • 2018-11-24
  • 2012-07-17
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多