Templatized интервал без веток, макс. функциональный / функциональная минута

NetworkStream.Read вернет количество прочитанных байтов. Вы можете использовать это для извлечения только фактических данных.

int receivedBytes = stream.Read(receivedBuffer, 0, receivedBuffer.Length);
string msg = Encoding.ASCII.GetString(receivedBuffer,0,receivedBytes);
12
задан Community 23 May 2017 в 12:17
поделиться

2 ответа

Обычно хорошие взгляды, но для 100%-й мобильности, замените это 8 CHAR_BIT (или numeric_limits:: макс. ()), так как не гарантируется, что символы 8-разрядные.

Любой хороший компилятор будет достаточно умен для слияния всех математических констант во время компиляции.

Можно вынудить это быть подписанным при помощи библиотеки черт типа. который обычно смотрел бы что-то как (предположение, что Вашу numeric_traits библиотеку называют numeric_traits):

typename numeric_traits<T>::signed_type x;

Пример вручную прокрученного numeric_traits заголовка мог быть похожим на это: http://rafb.net/p/Re7kq478.html (существует много комнаты для дополнений, но Вы получаете идею).

или еще лучше, используйте повышение:

typename boost::make_signed<T>::type x;

Править: IIRC, подписанные сдвиги вправо не должны быть арифметикой. Это распространено, и конечно случай с каждым компилятором, который я использовал. Но я полагаю, что стандарт оставляет его компилятором, являются ли сдвиги вправо арифметикой или не на типе со знаком. В моей копии чернового стандарта записано следующее:

Значение E1>> E2 является позициями двоичного разряда E1 rightshifted E2. Если E1 имеет неподписанный тип или если E1 имеет тип со знаком и неотрицательное значение, значение результата является неотъемлемой частью частного E1, разделенного на количество 2, возвел E2 в степень. Если E1 имеет тип со знаком и отрицательную величину, получающееся значение является определенной реализацией.

Но как я сказал, это будет работать над каждым компилятором, который я видел :-p.

9
ответ дан 2 December 2019 в 20:41
поделиться

Можно хотеть посмотреть на Повышение. Библиотека TypeTraits. Для обнаружения, подписывается ли тип, можно использовать is_signed черту. Можно также изучить enable_if/disable_if для удаления перегрузок для определенных типов.

2
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: