Russian Qt Forum
Ноябрь 05, 2024, 22:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Массив байт. Конвертация байт  (Прочитано 2896 раз)
Mafiy
Гость
« : Октябрь 31, 2012, 17:51 »

Подскажите как можно эти функции из 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.
« Последнее редактирование: Октябрь 31, 2012, 18:01 от Mafiy » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Октябрь 31, 2012, 19:58 »


А как быть с функциями 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
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 23.