Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/56: Рейтинг темы: голосов - 56, средняя оценка - 4.77
8 / 8 / 1
Регистрация: 19.04.2012
Сообщений: 71
1

Преобразование int-->byte-->char || string

09.01.2016, 09:01. Показов 10608. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Немного запутался... Прошу распутать.

Есть код, который сохраняет значения Int в файл.
Bash
1
2
3
4
5
6
73
83
72
208
184
186
это коды символов в UTF-8 (3 англ.символа, 3 русских символа)

Достаю из файла следующим образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            string line;
 
            System.IO.StreamReader file = new System.IO.StreamReader("file.txt");
 
            byte[] outpb = new byte[10];
 
            while ((line = file.ReadLine()) != null)
            {
                int a = int.Parse(line); // делаю int
              
                byte str1 = (byte)a; // делаю byte
 
                char b2 = (char)str1; // делаю char
            }
Английские буквы/символы отображаются без проблем.
Русские буквы - символом ?, прочие символы отображаются всякими рогаликами.

пробовал менять исходную кодировку на ASCII, Unicode = не прокатило.

Пробовал делать так:
C#
1
2
3
4
5
6
7
8
9
10
                int a = int.Parse(line);  // получаю int
 
                byte str1 = (byte)a;    // перевожу в byte
 
                for (int i = 0; i < line.Count(); i++ )
                {
                    outpb[i] = str1;      // заталкиваю в массив byte[]
                }
 
                Console.WriteLine(Encoding.UTF8.GetString(outpb));
Тоже выводятся знаки вопроса и пр. рогалики

Как правильно произвести преобразование, чтобы русские символы отображались корректно?

Добавлено через 9 минут
Полагаю, что ошибка кроется в самих кодировках, т.к. например русская буква И в UTF-8 имеет представление: 208 152, а моему скрипту на это до лампочки, т.к. он сохраняет 208 и 152 отдельно...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2016, 09:01
Ответы с готовыми решениями:

Преобразование string --> byte[] --> int[]
Играюсь с преобразованиями. Есть код: string str = &quot;It's crypted string from...

Чтобы универсальный метод принимал только: byte, int, string, char
Возникла необходимость сделать чтобы универсальный метод принимал только: byte,int,string,char....

Преобразование char* из библиотеки C++ в byte[] C#
Доброго времени суток, у меня возникла небольшая проблемка, надеюсь вы поможете в ее решении. ...

Преобразование из String в byte[]
Необходимо преобразовать строку String в byte. Пробую сделать по ссылке:...

6
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
09.01.2016, 09:09 2
Юникод никак не может быть байтом...
Так что:
C#
1
char b2 = (char)int.Parse(line);
Пояснение:
C#
1
2
3
4
5
6
7
8
// преобразуем символ в его код и отобразим
char aa = 'Ю';
MessageBox.Show(((int)aa).ToString());
 
// преобразуем обратно строку в символ
string line = "1070";
char b2 = (char)int.Parse(line);
MessageBox.Show(b2.ToString());
1
8 / 8 / 1
Регистрация: 19.04.2012
Сообщений: 71
09.01.2016, 09:28  [ТС] 3
В моем случае данный метод не подходит...

Обязательное условие - перевод String в int, которое я выполняю так:
C#
1
2
3
4
5
6
7
            string str = "qwertyuiopasdfghjklzxcvbnm йцукенгшщзхъфывапролджэячсмитьбю";
 
           Console.WriteLine("Входная строка {0} имеет длину {1}\n ", str, str.Length);
 
            byte[] b = Encoding.UTF8.GetBytes(str); перевожу в массив байтов
 
            int[] bytesAsInts = b.Select(x => (int)x).ToArray(); перевожу массив байтов в массив int'ов
Потом в цикле делаю построчную запись:
C#
1
2
3
4
5
6
int c = bytesAsInts.Length;
 
for (int i = 0; i < c; i++ )
            {
               Writer(bytesAsInts [i].ToString("D")); // обычный StreamWriter
}
Видимо нужно научить скрипт различать UTF-8 для русских символов.
Т.е. как-то обрабатывать два значения int, вместо одного, если первый Int >208

Как можно реализовать?
0
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
09.01.2016, 11:13 4
Цитата Сообщение от shirase Посмотреть сообщение
В моем случае данный метод не подходит...
В чем не подходит то?
У вас изначально неверные данные. Русские буквы не могут в UTF-8 иметь код из 3 цифр.
Далее вы начинаете опять какой то бред писать, переводя строку в байты и перебирая по одному. При том что в UTF-8 у символа длинна не 1 байт. Или это уже другая задача?
Вы бы определились что хотите...
1
8 / 8 / 1
Регистрация: 19.04.2012
Сообщений: 71
09.01.2016, 11:57  [ТС] 5
Да, исходные данные не корректны, не скопировалось полностью.
В общем есть string, содержащий русско-английские символы (вперемешку).
Мне нужно преобразовать string в int. (Бред не бред - заказчик сказал нужно)
Чтобы это сделать есть только один способ: перегнать строку в массив byte, а затем в массив int.

Знаете другой способ?

Далее нужно вывести каждый int на экран. И с этим проблем нет.

Потом требуется обратить процесс обратно: из int получить int[], чтобы затем получить byte[], затем string, т.о. восстановив исходную строку.

Проблема в том, что англ.символы в utf-8 представляется одним десятичным числом, а русские представляются двумя десятичными символами (208 145 == Б) и обратно это дело не декодируется, т.к. при преобразовании
алгоритм считает, что 208 -- это один символ, а 145 - другой символ.
Мне нужно побороть только эту проблему.
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
09.01.2016, 12:11 6
shirase,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication8
{
    public struct Program
    {
        private static void Main(string[] args)
        {
            string str = "qwertyuiopasdfghjklzxcvbnm йцукенгшщзхъфывапролджэячсмитьбю";
 
            Console.WriteLine(str);
 
 
            int[] ints = Encoding.Unicode.GetBytes(str).Select(i => (int) i).ToArray();
 
           string tmp=string.Join(" ",ints);
            Console.WriteLine(tmp);
 
            Console.WriteLine();
 
            byte[] arr = tmp.Split(' ').Select(byte.Parse).ToArray();
 
            Console.WriteLine(Encoding.Unicode.GetString(arr));
 
            Console.ReadKey();
 
        }
 
    }
 
}
1
8 / 8 / 1
Регистрация: 19.04.2012
Сообщений: 71
09.01.2016, 12:29  [ТС] 7
Спасибо HectorPrima, kypiwindy.
С вашей помощью разобрался
0
09.01.2016, 12:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2016, 12:29
Помогаю со студенческими работами здесь

Преобразование byte в string
Приветствую всех, столкнулся с проблемой Имею код MD5 md5 = new MD5CryptoServiceProvider(); ...

Осуществить преобразование IEnumerable<string[]> to byte[]
Как осуществить преобразование IEnumerable&lt;string&gt; to byte ?

Преобразование типов string в byte и в Hex
Дело в том что устройства в по сети rs-485 обозначаются в hex, т.е. 26 устройство соответственно...

Преобразование char в int
Как перевести например строку char*=&quot;jjjjjjj&quot;в целое типа int используя функции си?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru