winsock上的蓝牙,如何删除字节顺序标记
bluetooth over winsock, how to remove byte order mark
我想通过蓝牙将一些字符串数据从我的Android设备传输到我的Windows笔记本电脑。使用微软提供的带有winsock2的蓝牙代码示例,我能够使用以下代码传输数据。不幸的是,我在发送的字符串的开头收到了一个字节顺序标记。当然,我可以简单地删除前四个字节,但这对我来说有点脏。我还有其他选择吗?
用于接收的C++代码(为了更好的可读性而稍作修改->无错误处理无注释等)
ClientSocket = accept(LocalSocket, NULL, NULL);
BOOL bContinue = TRUE;
pszDataBuffer = (char *)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
CXN_TRANSFER_DATA_LENGTH);
pszDataBufferIndex = pszDataBuffer;
uiTotalLengthReceived = 0;
while ( bContinue && (uiTotalLengthReceived < CXN_TRANSFER_DATA_LENGTH) ) {
iLengthReceived = recv(ClientSocket,
(char *)pszDataBufferIndex,
(CXN_TRANSFER_DATA_LENGTH - uiTotalLengthReceived),
0);
switch ( iLengthReceived ) {
case 0: // socket connection has been closed gracefully
bContinue = FALSE;
break;
case SOCKET_ERROR:
wprintf(L"=CRITICAL= | recv() call failed. WSAGetLastError=[%d]n", WSAGetLastError());
bContinue = FALSE;
ulRetCode = CXN_ERROR;
break;
default:
pszDataBufferIndex += iLengthReceived;
uiTotalLengthReceived += iLengthReceived;
break;
}
}
if ( CXN_SUCCESS == ulRetCode ) {
pszDataBuffer[uiTotalLengthReceived] = ' ';
wprintf(L"*INFO* | Received following data string from remote device:n%sn", (wchar_t *)pszDataBuffer);
closesocket(ClientSocket);
ClientSocket = INVALID_SOCKET;
}
发送的Android代码:
OutputStream socketOutpuStream = socket.getOutputStream();
socketOutputStream.write(dataString.getBytes(Charsets.UTF_16));
好吧,我现在觉得很愚蠢。在同质java环境中工作了几年,这让我完全忘记了java在使用unicodecharset作为参数调用getBytes()时会设置字节顺序标记。在android端将dataString.getBytes(Charsets.UTF_16)
更改为dataString.getBytes(StandardCharsets.UTF_16LE)
(windows是little-endian)后,一切都如预期那样工作。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 一种从内存中删除 UTF 字节的方法?
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++ 在请求特定字节的新建后删除
- 如何从 C 或 C++ 格式的文件中删除字节?
- 删除字节数组 : Qt 缓冲区之间的空字符 (\x00)
- winsock上的蓝牙,如何删除字节顺序标记
- 删除字节转换的char*
- fstream从二进制文件的末尾删除n个字节
- 在Windows上添加/删除文件末尾的字节
- 在Windows上,从文件中删除前N个字节的最有效方法是什么
- 删除内存字段(数组)中的单个字节
- 如何删除前3个字节的缓冲区
- 删除文件中间的字节而不移动末尾