none
Конвертирование двух байт в число RRS feed

  • Вопрос

  • Добрый день!

    Есть два байта. Например 122; 2. Нужно их перевести в число. Максимальные значения двух байтов могут быть 255; 255. Как их представить в виде одного числа десятичного.

    Спасибо!

    23 октября 2014 г. 8:46

Ответы

Все ответы

  • Посмотрите этот класс.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    23 октября 2014 г. 9:11
  • Если дополнительных требований нет, то хоть вот так:

    • Помечено в качестве ответа Alexander2106 24 октября 2014 г. 14:38
    23 октября 2014 г. 10:16
    Отвечающий
  • Да, но есть нюанс - число записанное в двух байтах 12 разрядное.

    То есть это монохромный пиксель Gray16 яркость которого записана в двух байтах, но по факту матрица с которой мы берем эти пиксели 12 разрядная.


    • Изменено Alexander2106 23 октября 2014 г. 10:33
    23 октября 2014 г. 10:33
  • Ну и что? Отсеките старшие 4 бита у второго байта, и будет Вам счастье. Подсказать соответствующие операции C# (или C++)? Или я что-то не понял в Вашей задаче? Тогда объясните подробнее.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    23 октября 2014 г. 10:39
  • Да прошу подсказать эти операции в c#!

    • Изменено Alexander2106 23 октября 2014 г. 10:42
    23 октября 2014 г. 10:41
  • byte a, b;

    int c = ((b & 0xF) << 8) | a;


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Alexander2106 23 октября 2014 г. 10:45
    • Снята пометка об ответе Alexander2106 23 октября 2014 г. 11:49
    23 октября 2014 г. 10:43
  • Спасибо, но работает не корректно!

    есть картинка, из которой получили BitmapSource.CopyPixel

    цвета в этой картинке идут от белого к черному с некоторым шагом.

    Вот значения яркости в пикселях в байтах (каждому пикселю два байта):

    255,255 - белый

    21,223

    153,190

    157,158

    54,127

    128,96

    168,66

    2,38

    10,8 - почти черный

    По вашей формуле полученные значения идут не корректно.


    • Изменено Alexander2106 23 октября 2014 г. 11:54
    23 октября 2014 г. 10:45
  • То что вы показываете, никак не уложиться в 12 разрядов. Т.к. 255 это 8 разрядов. Ну а в 16 разрядов можете приобразовывать моим алгоритмом, только судя по порядку предоставленных вами данных, второе число записывайте в переменную a, а первое в b.
    23 октября 2014 г. 12:20
    Отвечающий
  • я вот и пытаюсь разобраться как так выходит :)

    у меня частично получилось по вот такой импирической формуле:

    пусть первое число  = a, второе b, тогда

    bright = (a + b * 256)/16

    это по сути ваша формула только с делением

    и получается вот такой порядок значений яркости

    4095

    3569

    3049

    2537

    2035

    1544

    1066

    608

    128

    но они все получаются с остатком, чего, я думаю, быть не должно.

    • Изменено Alexander2106 23 октября 2014 г. 14:52
    23 октября 2014 г. 14:49
  • Выясните сначала, какими данными Вы обладаете? Что выдает АЦП, какие разряды прочитанных из него данных имеют смысл? А уж потом "грузите" других людей. По своему многолетнему опыту общения с аппаратурой могу сообщить, что данные с 12-разрядных АЦП "укладываются" в обычную память так, как я Вам и говорил: 4 старших разряда не являются значимыми (тем более, что в Вашем случае, они беззнаковые). При этом, правда, данные считываются 16-разрядными словами, а не байтами. Считывая из устройства байты можно получить лишь "хвосты" от 12-разрядных значений.

    Короче говоря, плотнее познакомьтесь с Вашей аппаратурой, без этого доверять данным нельзя.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    • Изменено kosuke904 24 октября 2014 г. 8:50
    23 октября 2014 г. 18:47
  • Извините конечно, но Вас же никто не заставляет здесь отвечать... И никого и ни чем я не "гружу"


    А если по теме, то можно ли BitmapSource.CopyPixels выполнить не в байтовый массив, а в битовый?
    24 октября 2014 г. 8:37
  • Не обижайтесь :) Вы правы, меня никто не заставляет, отвечаю я исключительно из добрых побуждений. Но дать правильный (требуемый Вами) ответ можно только в том случае, если вопрос поставлен грамотно. А я так понял, что Вы не до конца понимаете, что за данные у Вас "на руках".

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    24 октября 2014 г. 8:46
  • Извините конечно, но Вас же никто не заставляет здесь отвечать... И никого и ни чем я не "гружу"

    Именно, нас никто не заставляет и если вы недоговариваете, по ходу дела меняете показания, то 1) вам сложно помочь, т.е. вы тратите свое время, 2) будет меньше желающих помочь именно вам

    А если по теме, то можно ли BitmapSource.CopyPixels выполнить на в байтовый массив, а в битовый?

    Вот я о том же. Одна тема - один вопрос. Если ваш вопрос решился, то пометьте ответ или ответы которые помогли вам в решении вашей проблемы, либо уточните, какие еще непонятные места у вас остались. И новый вопрос задавайте в новом топике, чтобы удобнее было искать в дальнейшем ответы другим пользователям.

    Ну и по теме, стандартного метода - нет.

    24 октября 2014 г. 8:46
    Отвечающий
  • Хорошо
    24 октября 2014 г. 14:37