Имя: Пароль:
1C
 
Как записать массив байтов в файл?
0 DTX 4th
 
03.07.17
17:52
Например, есть массив
Мас = [1, 2, 3, 128, 255]
Как записать его в файл?

П.с. изначально у меня есть строка в шестнадцатеричной системе счисления, мне нужно получить base64 от байтового представления. Мб есть простой путь?
Вот так это выглядит на C#:
http://rextester.com/YFEIN94651
1 Волшебник
 
модератор
03.07.17
18:12
2 Волшебник
 
модератор
03.07.17
18:13
В сабже: Как записать массив байтов в файл?
В сообщении: мне нужно получить base64 от байтового представления.
3 DTX 4th
 
03.07.17
18:17
(1) Что тут?
Как base64 от ДД получить я знаю. Сейчас ковыряю БуферДвоичныхДанных.

(2) Сабж это промежуточный шаг всего процесса.
4 Cyberhawk
 
03.07.17
18:21
ЯННП, но метод "base64строка" уже смотрел?
5 Garykom
 
гуру
03.07.17
18:22
Сначала надо с Символ и КодСимвола поработать...
6 Serginio1
 
03.07.17
18:45
7 Garykom
 
гуру
03.07.17
18:46
(6) О! Вы то мне и нужны!
8 Garykom
 
гуру
03.07.17
18:50
(6) Каким образом можно на C#/.Net автосоздавать объект из XML?

Без написания муторных классов шаблонов и аннотаций типа

[XmlRoot("CheckPackage")]
    public class CheckPackage
    {
        [XmlElement("Parameters")]
        public Parameters Parameters { get; set; }

        [XmlElement("Positions")]
        public Positions Positions { get; set; }

        [XmlElement("Payments")]
        public Payments Payments { get; set; }

    }

    public class Parameters
    {
        [XmlAttribute("PaymentType")]
        public string PaymentType { get; set; }

        [XmlAttribute("SenderEmail")]
        public string SenderEmail { get; set; }

        [XmlAttribute("CustomerEmail")]
        public string CustomerEmail { get; set; }

        [XmlAttribute("CustomerPhone")]
        public string CustomerPhone { get; set; }

        [XmlAttribute("AgentCompensation")]
        public string AgentCompensation { get; set; }

        [XmlAttribute("AgentPhone")]
        public string AgentPhone { get; set; }
    }

    public class Positions
    {
        [XmlElement("FiscalString")]
        public List<FiscalString> FiscalStrings { get; set; }

        [XmlElement("TextString")]
        public List<TextString> TextStrings { get; set; }

        [XmlElement("Barcode")]
        public List<BarcodeString> Barcodes { get; set; }
    }

    public class BarcodeString
    {
        [XmlAttribute("BarcodeType")]
        public string BarcodeType { get; set; }

        [XmlAttribute("Barcode")]
        public string Barcode { get; set; }
    }

    public class TextString
    {
        [XmlAttribute("Text")]
        public string Text { get; set; }
    }

    public class FiscalString
    {
        [XmlAttribute("Name")]
        public string Name { get; set; }

        [XmlAttribute("Quantity")]
        public string Quantity { get; set; }

        [XmlAttribute("Price")]
        public string Price { get; set; }

        [XmlAttribute("Amount")]
        public string Amount { get; set; }

        [XmlAttribute("Tax")]
        public string Tax { get; set; }
    }

    public class Payments
    {
        [XmlAttribute("Cash")]
        public string Cash { get; set; }

        [XmlAttribute("CashLessType1")]
        public string CashLessType1 { get; set; }

        [XmlAttribute("CashLessType2")]
        public string CashLessType2 { get; set; }

        [XmlAttribute("CashLessType3")]
        public string CashLessType3 { get; set; }
    }
9 Garykom
 
гуру
03.07.17
18:58
(8)+ Вот когда шаблончик задан то уже все легко и банально

        public static T DeserializeXMLFileToObject<T>(Stream xmlstream)
        {
            T returnObject = default(T);
            //if (string.IsNullOrEmpty(XmlFilename)) return default(T);
            try
            {
                StreamReader xmlStream = new StreamReader(xmlstream);
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                returnObject = (T)serializer.Deserialize(xmlStream);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            return returnObject;
        }
10 DTX 4th
 
03.07.17
21:58
(5) Не получилось. Некорректно записывает строку вида
Символ(1) + Символ(2) + ... + Символ(255)

Хотя может проблема в BOM была.

Вот так получилось в итоге:
Функция ПреобразоватьThreadIndexДляОтветаВBase64(знач ThreadIndexТемы)
    ThreadIndex = Сред(ThreadIndexТемы, 3, СтрДлина(ThreadIndexТемы));
    
    Рез = Новый Массив;
    Сч = 1;
    Пока Истина Цикл
        Байт = Сред(ThreadIndex, (Сч-1)*2+1, 2);
        Если ПустаяСтрока(Байт) Тогда
            Прервать;            
        КонецЕсли;
        
        Рез.Добавить(ИзЛюбойВ10(Байт, 16));
        
        Сч = Сч + 1;
    КонецЦикла;
    //Для каждого нового уровня вложенности добавляются любые 5 байт
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    Для Сч = 1 По 5 Цикл
        Рез.Добавить(ГСЧ.СлучайноеЧисло(0, 255));        
    КонецЦикла;  
    Буф = Новый БуферДвоичныхДанных(Рез.Количество());
    Для Сч = 0 По Рез.Количество() - 1 Цикл
        Буф[Сч] = Рез[Сч];        
    КонецЦикла;
    
    Поток = Новый ПотокВПамяти(Буф);    
    ДД = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    Рез = Base64Строка(ДД);
    Возврат Рез;
КонецФункции
11 Имитация работы
 
03.07.17
23:33
(9) Это не интересно. А вот на Typescript сейчас ... (:
12 Serginio1
 
04.07.17
10:02
(9) Есть куча сериализаторов которые через рефлексию сериализуют публичные свойства.

Ну и тот же XmlSerializer чем не подходит?

https://msdn.microsoft.com/ru-ru/library/system.xml.serialization.xmlserializer(v=vs.110).aspx
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.