Top.Mail.Ru
Ответы

Как программисты портировали Skype на Windows Phone если на C# нет сериализации как в Си и работа с бинарными данными?

В C# работа с бинарными данными очень сложная, вот пример где число переводится в байт на C#:

12345
 //Конвертирует из числа в байт 
private static String conv_int_to_chr(int num) 
{ 
  return ((char)num).ToString(); 
} 
Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

пример где число переводится в байт на C#:

Ты ошибаешься. Твой код преобразует число не в байт и не в символ, а в строку, состоящую из одного символа. Именно потому так длинно.
Но для перевода числа в символ достаточно: (char)num - точно так же, как в C/C++.

Аватар пользователя
Мудрец

В C# нет никаких проблем с сериализацией и бинарными данными. В C# с бинарями работать даже удобнее, чем в C++, есть всякие Span, ref struct и классы BinaryReader/Writer.
В вашем коде число в байт не преобразуется.
byte a = unchecked((byte)num); // вот число в байт. Но зачем?

Аватар пользователя
Профи
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
 using System; 
using System.IO; 
 
class Program 
{ 
    static void Main() 
    { 
        // Пример сериализации 
        SerializeData("data.dat"); 
 
        // Пример десериализации 
        DeserializeData("data.dat"); 
    } 
 
    static void SerializeData(string filePath) 
    { 
        using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create))) 
        { 
            int intValue = 42; 
            double doubleValue = 3.14; 
            string stringValue = "Hello, Binary World!"; 
 
            // Записываем данные в бинарный файл 
            writer.Write(intValue); 
            writer.Write(doubleValue); 
            writer.Write(stringValue); 
        } 
 
        Console.WriteLine("Serialization complete."); 
    } 
 
    static void DeserializeData(string filePath) 
    { 
        using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open))) 
        { 
            // Читаем данные из бинарного файла 
            int intValue = reader.ReadInt32(); 
            double doubleValue = reader.ReadDouble(); 
            string stringValue = reader.ReadString(); 
 
            // Выводим прочитанные данные 
            Console.WriteLine($"Int Value: {intValue}"); 
            Console.WriteLine($"Double Value: {doubleValue}"); 
            Console.WriteLine($"String Value: {stringValue}"); 
        } 
 
        Console.WriteLine("Deserialization complete."); 
    } 
}