Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в число и вывод 
:(
    Опции темы
VampirDX
Дата 28.11.2009, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



Продолжение прошлой темы, дабы не путать. 
Допустим есть массив из 3-х байтовых чисел. Как его записать в единое число и вывести его на экран? Использую textBox.

Записать, т.е. число допустим 000000000, и как в него записать данные с массива так, чтобы f[0] было в первой тройке, f[1] было во второй тройке, и т.д.

А вывод имеется ввиду, что вывод обычного числа, а не байт, int или double или что там еще. 

Если честно, сам не разобрался до конца. Если есть вопросы у желающих помочь - задавайте, постараюсь ответить.

PS: спасибо tol05 и Heinzz за ответы.
PM MAIL   Вверх
Lunatic2009
Дата 28.11.2009, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 1.7.2009

Репутация: нет
Всего: 3



Не совсем понятно, Вам нужно что бы было так:

Код

byte[] bArr = new byte[] { 10, 122, 4 };


результат: 100122400
или так: 100012200400


Это сообщение отредактировал(а) Lunatic2009 - 28.11.2009, 05:31
PM   Вверх
Heinzz
Дата 28.11.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Код

byte[] bArr = new byte[] { 10, 122, 4 };
            string output = bArr.Aggregate("", (total, next) => next.ToString().Length == 3 ? total.ToString() + next.ToString() : next.ToString().Length == 2 ? total.ToString() + "0" + next.ToString() : total.ToString() + "00" + next.ToString());
            Console.WriteLine(output);

работает smile 


--------------------
user posted image
PM MAIL   Вверх
Heinzz
Дата 28.11.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Коряво как то. 
Лучше проще:

Код

    string output = bArr.Aggregate("", (total, next) => total.ToString() + next.ToString("d3"));




--------------------
user posted image
PM MAIL   Вверх
VampirDX
Дата 29.11.2009, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



что-то, heinzz, от твоих примеров у меня там числа шибко большие получаются))
Попробую как-то популярнее объяснить...
есть массив байт из 3 чисел: 
Код

a {от 0 - до 255} , b {0 - 255}, c {0 - 255}, т.е. D {a, b, c}
.
Как мне эти числа вбить в одно число со смещением, т.е. R = 000000000 и число должно получиться 
Код

R = abc;
 
 
Так, чтобы оставшиеся нули были слева.
смещение  "<<".
PM MAIL   Вверх
Heinzz
Дата 29.11.2009, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



ну так параметр d3 в ToString  как раз и говорит о том что каждый  байт должен быть записан тремя цифрами, если же он короче добавляются нули слева.


--------------------
user posted image
PM MAIL   Вверх
VampirDX
Дата 29.11.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



да, действительно..ты прав...получилось как надо. А как теперь полученную строку в десятичное число преобразовать, так так на данный момент в ней последовательность байт? 
PM MAIL   Вверх
Heinzz
Дата 29.11.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Это очень просто
Код

 double number = double.Parse(output);

получаем десятичное число, правда нули спереди исчезнут.
Помимо double можно получить и int что в данном случае на мой взгляд лучше подходит (число же всегда целое)


--------------------
user posted image
PM MAIL   Вверх
Zakonnic
Дата 29.11.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 25.4.2006

Репутация: 2
Всего: 6



А может просто bArr[0]*1000000+bArr[1]*1000+bArr[2] ?  smile 
Или на худой конец так:
int output = bArr.Aggregate(0, (total, next) => total * 1000 + next);

PS. Вас точно десятичные смещения интересуют, а не двоичные?

Это сообщение отредактировал(а) Zakonnic - 29.11.2009, 20:31
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
VampirDX
Дата 29.11.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



Zakonnic как бы грустно это не звучало...но я сам уже не совсем понимаю, что меня интересует...
ну а для byte'ов что надо?
мне-то надо, чтобы при входе 3-х байтовых чисел, их совместить в одно и вывести в виде десятичного числа.

Кстати, Heinzz, точно десятичного, потому что у меня на выходе будут числа типа -4,3954  и  типа 0,10353.
PM MAIL   Вверх
SmartBye
Дата 30.11.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



Код

byte[] bytes = new byte[] { 123, 59, 81, 124, 54 };
            StringBuilder sb = new StringBuilder();
            foreach (byte item in bytes)
            {
                sb.Append(String.Format("{0:D3}", item));
            }
            Console.WriteLine(sb.ToString());

Или так:
Код

            byte[] bytes = new byte[] { 123, 59, 81, 124 };            
            long output = 0;
            for (int i = 0; i < bytes.Length; i++)
            {
                long mult = 1;
                for (int j = mult; j < bytes.Length-i; j++)
                {
                    mult *= 1000;
                }
                output += (long)bytes[i] * mult;
            }

            Console.WriteLine("{0}", output.ToString());


Но, возможно, я не так понял вашу задачу.

Это сообщение отредактировал(а) SmartBye - 30.11.2009, 21:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.