Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/75: Рейтинг темы: голосов - 75, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 7

Перевод десятичного числа в байты

11.03.2012, 20:37. Показов 14209. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброе время суток!
Пишу драйвера для принтера чеков под linux... не могу найти ответа на вопрос:
Требуется число, допустим, 2345 загнать в два байта в виде 0х23, 0х45, а не в четыре. Т.е. необходимо чтобы они были именно в таком формате без конвертации в hex.
Скажите пожалуйста как это можно сделать средствами c#.

Заранее большое спасибо за ответ!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2012, 20:37
Ответы с готовыми решениями:

Перевод целого десятичного числа в двоичную и восьмеричную системы счисления
Составить программу перевода введенного целого десятичнрго числа в двоичную и восьмеричную системы счисления. Предусмотреть чтобы...

Поменять местами младший и старший байты в двоичном представлении десятичного числа
Дано десятичное число 871. Необходимо поменять местами младший и старший байты в его двоичном представлении, а затем в младшем байте...

Перевод из десятичного числа в 16-й
Ребят помогите найти ошибку. Вводится десятичное число в консоль, затем переводится в шестнадцатиричное и выводится в консоль. Переводит не...

15
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
11.03.2012, 21:11
Если не сильно морочится на оптимальности:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
 
class Program
{
    static void Main(string[] args)
    {
        uint in_val = 1234;
        uint out_val= 0;
        uint i;
        for (i = 0; i < 8; i ++) // 8 - количество разрядов приёмника
        {
            out_val += ((in_val / (uint)Math.Pow((double)10, (double)i)) % 10) * (uint)Math.Pow(16.0, (double)i);
        }
        Console.WriteLine("out_val {0}", out_val.ToString("X8"));
        Console.WriteLine("Press ENTER to exit");
        Console.ReadLine();
        
    }
}
Если надо сосем быстро, то могу подумать о битовых операциях..

А что за проект такой, если не секрет, где C# и linux?
1
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 7
11.03.2012, 22:46  [ТС]
Спасибо за ответ!
Не секрет! Торговое программное обеспечение под лицензией GPL WarehouseOpen на mono. Я его дорабатываю под аптечный бизнес...все сделал теперь, вот с принтером чеков диалог веду
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
12.03.2012, 08:41
C#
1
2
3
4
5
6
int i = 0x44445555;
int j = (i >> 16) & 0xFFFF;
int k = i & 0xFFFF;
Console.WriteLine("0x{0:X} 0x{1:X} 0x{2:X}",i, j, k);
// output
// 0x44445555 0x4444 0x5555
0
 Аватар для emppu2007
92 / 92 / 6
Регистрация: 04.05.2011
Сообщений: 171
12.03.2012, 09:31
Извиняюсь, что не по теме.
DmitriyK23
 Комментарий модератора 
Правила п.2.12

Мне с вами поговорить нужно срочно, а ваша личка недоступна.
Наши интересы удивительно совпали: я сейчас так же занят аптечным бизнесом, разрабатываю приложение на C# и теперь тоже запнулся на принтере чеков.
0
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 7
12.03.2012, 12:16  [ТС]
Цитата Сообщение от emppu2007 Посмотреть сообщение
Извиняюсь, что не по теме.
DmitriyK23
Правила п.2.12
Мне с вами поговорить нужно срочно, а ваша личка недоступна.
Наши интересы удивительно совпали: я сейчас так же занят аптечным бизнесом, разрабатываю приложение на C# и теперь тоже запнулся на принтере чеков.
Пожалуйста. Не нашел как можно написать в личку...
Добро пожаловать: [вырезано]
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
12.03.2012, 12:41
DmitriyK23, Модератор только что сделал замечание одному из пользователей, а Вы следом повторяете ту же ошибку. Прочитайте Правила
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
12.03.2012, 12:41
Konctantin, Беда в том, что нужно число 1234 перевести в 0x1234, а не выделить разряды
0
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 7
12.03.2012, 13:25  [ТС]
Нет беда в другом...
Как, допустим, число 0123456789 перевести в 5 байтов 0х01, 0х23, 0х45, 0х67, 0х89

Добавлено через 18 минут
Вот так правильно будет?
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
uint iInput = 0123456789;
uint in_val1 = iInput/100000000;
uint in_val2 = iInput/1000000;
uint in_val3 = iInput/10000;
uint in_val4 = iInput/100;
uint in_val5 = iInput;
            
uint out_val1= 0;
uint out_val2= 0;
uint out_val3= 0;
uint out_val4= 0;
uint out_val5= 0;
            
uint i;
for (i = 0; i < 2; i ++)
{
    out_val1 += ((in_val1 / (uint)Math.Pow(10.0, (double)i)) % 10) * (uint)Math.Pow(16.0, (double)i);
    out_val2 += ((in_val2 / (uint)Math.Pow(10.0, (double)i)) % 10) * (uint)Math.Pow(16.0, (double)i);
    out_val3 += ((in_val3 / (uint)Math.Pow(10.0, (double)i)) % 10) * (uint)Math.Pow(16.0, (double)i);
    out_val4 += ((in_val4 / (uint)Math.Pow(10.0, (double)i)) % 10) * (uint)Math.Pow(16.0, (double)i);
    out_val5 += ((in_val5 / (uint)Math.Pow(10.0, (double)i)) % 10) * (uint)Math.Pow(16.0, (double)i);
}
Console.WriteLine("out_val {0}", out_val1.ToString("X2"));
Console.WriteLine("out_val {0}", out_val2.ToString("X2"));
Console.WriteLine("out_val {0}", out_val3.ToString("X2"));
Console.WriteLine("out_val {0}", out_val4.ToString("X2"));
Console.WriteLine("out_val {0}", out_val5.ToString("X2"));
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
12.03.2012, 13:31
максимум сколько байт? в 8 байт на выходе уложишься?

Важно ли, чтобы каждый байт был отдельно?

т.е. то, что ты написал работать будет (в первом приближении), но писать так не надо, Индусы обзавидуются
0
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 7
12.03.2012, 13:44  [ТС]
Да важно чтобы байты были отдельно. Мне надо последовательность из 5 байт послать на принтер чеков, а не одним байтом...

Добавлено через 4 минуты
Как надо, если не секрет?
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
12.03.2012, 13:46
если в 8 байт (16 разрядов) уложишься, то можно так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void Main(string[] args)
{
    KiaInterface KIA = new KiaInterface();
    uint in_val = 1234;
    UInt64 out_val= 0;
    uint i;
    for (i = 0; i < 10; i ++) // 10 - количество разрядов приёмника
    {
        out_val += ((in_val / (uint)Math.Pow((double)10, (double)i)) % 10) * (uint)Math.Pow(16.0, (double)i);
    }            
    Console.WriteLine("out_val {0}", out_val.ToString("X8"));
    Console.WriteLine("Press ENTER to exit");
    Console.ReadLine();
    BitConverter.GetBytes(out_val); // Вот эта функция выдаст набор байт
    
}
Если больше 16 разрядов надо - тогда сразу пиши в массив

Добавлено через 1 минуту
ulong, если UInt64 религия писать не позволяет (не знаю, как именованные типы называются в mono)
0
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 7
12.03.2012, 14:14  [ТС]
Спасибо!
Мне хватит 5-ти байт, но почему-то когда я забиваю в выше указанный код in_val = 1234567890, то он первые 2-е цифры, т.е. 12, не видит... О_о Функция BitConverter.GetBytes() выдает набор байт:
0х90, 0х78, 0х56, 0х34, 0х00, 0х00, 0х00, 0х00, а байта 0х12 нет...
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
12.03.2012, 14:24
моя недоработка: замени uint на ulong в выражении.

И uint in_val = 1234; на ulong in_val = 1234;, а то при использовании чисел более 4х миллиардов будут бяки

Добавлено через 2 минуты
Хотя честно скажу, тому кто требует шестнадцатеричные числа в качестве десятичных надо руки оборвать
1
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 7
12.03.2012, 14:26  [ТС]
silicium, Спасибо большое все работает! Спасибо за уделённое время!

Добавлено через 1 минуту
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
12.03.2012, 14:32
Ну... Надо же мне как-то самолюбие тешить и профессиональную деформацию выправлять

А если серьёзно - обращайтесь. Я в основном Embedded решениями как раз и занимаюсь, шарп просто для удобства решения сервисных задач использую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2012, 14:32
Помогаю со студенческими работами здесь

Перевод десятичного числа в двоичную
Используя известные базовые алгоритмические структуры и методики перевода чисел из одной системы счисления в другую, составить программу....

Перевод десятичного числа в шестнадцатеричное
Через Edit1 вводится целое десятичное число. Вывести его шестнадцатеричное изображение. Я код написал, вроде всё работает но выводит он...

Перевод из десятичного числа в двоичное
Мне надо из символа получить ASCII-код, а из него получить число в двоичной с/с. Подскажите как мне из 10 с/с в двоичную перевести, а то...

Перевод десятичного числа в двоичное
Добрый вечер! Помогите пожалуйста с решением следующей задачи: необходимо написать программу для перевода ASCII-цепочки (числа) в...

Перевод десятичного числа в двоичное
На Машине Тьюринга реализовать перевод десятичного числа в двоичное. Такое возможно?


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru