Подскажите как можно эти функции из C# реализовать на С++ при помощи Qt
private MemoryStream _memoryStream= new MemoryStream();
public void WriteUTFBytes(string value)
{
//Length - max 65536.
UTF8Encoding utf8Encoding = new UTF8Encoding();
byte[] buffer = utf8Encoding.GetBytes(value);
if (buffer.Length > 0)
WriteBytes(buffer);
}
public void WriteBytes(byte[] buffer)
{
for (int i = 0; buffer != null && i < buffer.Length; i++)
_memoryStream.WriteByte(buffer[i]);
}
public void WriteByte(int value)
{
_memoryStream.WriteByte((byte)value);
}
public void WriteShort(int value)
{
byte[] bytes = BitConverter.GetBytes((ushort)value);
WriteBigEndian(bytes);
}
private void WriteBigEndian(byte[] bytes)
{
if (bytes == null)
return;
for (int i = bytes.Length - 1; i >= 0; i--)
{
_memoryStream.WriteByte(bytes[i]);
}
}
public void WriteUInt24(int value)
{
byte[] bytes = new byte[3];
bytes[0] = (byte)(0xFF & (value >> 16));
bytes[1] = (byte)(0xFF & (value >> 8));
bytes[2] = (byte)(0xFF & (value >> 0));
_memoryStream.Write(bytes, 0, bytes.Length);
}
Вместо MemoryStream я пробовал использовать Qbuffer
Функцию WriteUInt24 сделал так:
void ByteArray::WriteUInt24(int value)
{
QByteArray byte;
byte.resize(3);
byte[0] = 0xFF & (value >> 16);
byte[1] = 0xFF & (value >> 8);
byte[3] = 0xFF & (value >> 0);
m_buffer.write(byte);
}
Функцию WriteUTFBytes так:
void ByteArray::WriteUTFBytes(QString &str)
{
QByteArray byte = str.toUtf8();
m_buffer.write(byte);
}
Но я не совсем уверен, что они правильные.
А как быть с функциями WriteShort и WriteByte я не знаю. так как они принимают тип int.
А как быть с функциями WriteShort и WriteByte я не знаю. так как они принимают тип int.
так же, как и в C# - тупо приведением типа, лишние старшие биты отбросятся.
C++ (Qt)
int intValut = 7633234; // int
char charValue = intValut; // byte
short shortValue = intValut; // short
char lowByteOfShort = shortValue & 0xff; // младший байт от short
char highByteOfShort = shortValue / 256; // старший байт от short