Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Запись в число и вывод


Автор: VampirDX 28.11.2009, 05:10
Продолжение http://forum.vingrad.ru/forum/topic-281638.html, дабы не путать. 
Допустим есть массив из 3-х байтовых чисел. Как его записать в единое число и вывести его на экран? Использую textBox.

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

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

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

PS: спасибо tol05 и Heinzz за ответы.

Автор: Lunatic2009 28.11.2009, 05:29
Не совсем понятно, Вам нужно что бы было так:

Код

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


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

Автор: Heinzz 28.11.2009, 11:28
Код

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 

Автор: Heinzz 28.11.2009, 11:53
Коряво как то. 
Лучше проще:

Код

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


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

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

R = abc;
 
 
Так, чтобы оставшиеся нули были слева.
смещение  "<<".

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

Автор: VampirDX 29.11.2009, 16:03
да, действительно..ты прав...получилось как надо. А как теперь полученную строку в десятичное число преобразовать, так так на данный момент в ней последовательность байт? 

Автор: Heinzz 29.11.2009, 17:53
Это очень просто
Код

 double number = double.Parse(output);

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

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

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

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

Кстати, Heinzz, точно десятичного, потому что у меня на выходе будут числа типа -4,3954  и  типа 0,10353.

Автор: SmartBye 30.11.2009, 20:28
Код

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());


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)