Перейти к содержимому

4 байта сколько знаков

  • автор:

Диапазоны типов данных

32-разрядные и 64-разрядные компиляторы Microsoft C++ распознают типы в таблице далее в этой статье.

Если имя начинается с двух символов подчеркивания ( __ ), тип данных является нестандартным.

Диапазоны, представленные в следующей таблице, включают указанные значения.

Тип Имя Байт Другие имена Диапазон значений
int 4 signed От −2 147 483 648 до 2 147 483 647
unsigned int 4 unsigned От 0 до 4 294 967 295
__int8 1 char От -128 до 127
unsigned __int8 1 unsigned char От 0 до 255
__int16 2 short , short int , signed short int От −32 768 до 32 767
unsigned __int16 2 unsigned short , unsigned short int От 0 до 65 535
__int32 4 signed , signed int , int От −2 147 483 648 до 2 147 483 647
unsigned __int32 4 unsigned , unsigned int От 0 до 4 294 967 295
__int64 8 long long , signed long long От −9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
unsigned __int64 8 unsigned long long От 0 до 18 446 744 073 709 551 615
bool 1 нет false или true
char 1 нет -128–127 по умолчанию

В зависимости от характера использования переменная типа __wchar_t обозначает расширенный символьный или многобайтовый символьный тип. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L .

signed и unsigned — это модификаторы, которые можно использовать с любым целочисленным типом, кроме типа bool . Обратите внимание, что char , signed char и unsigned char — это три разных типа, предназначенных для механизмов, подобных перегрузке и шаблонам.

Размер типов int и unsigned int — 4 байта. Однако переносимый код не должен зависеть от размера int , поскольку языковой стандарт позволяет варьировать его в зависимости от реализации.

C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. Дополнительные сведения см. в разделе __int8, __int16, __int32, __int64 и ограничения целых чисел.

Дополнительные сведения об ограничениях размеров каждого типа см. в разделе «Встроенные типы».

Диапазон перечисляемых типов зависит от контекста языка и указанных флажков компилятора. Дополнительные сведения см. в статьях Объявления перечислений C и Объявления перечислений C++.

Строка в кодировке UTF-8

Преобразует входную строку в шестнадцатеричный, двоичный или десятичный дамп в кодировке UTF-8 и обратно из дампа в строку.

Калькулятор ниже можно использовать для преобразования строки в шестнадцатеричный / двоичный или десятичный дамп в кодировке utf-8. Калькулятор определяет количество символов в строке, число символов занимающих один, два, три или четыре байта в кодировке utf8, а также общее число байт в тексте, закодированном utf8.
Немного информации о представлении строк в Юникоде и uft-8 можно найти под калькуляторами.

Строка в UTF-8

Входной текст
Выводить как
Число разрядов в строке
Разделять строку
Разделитель
Рассчитать
Строка в UTF-8
Количество символов
Количество байт
Количество символов длины 1,2,3,4 байта
Ссылка Сохранить Виджет

Следующий калькулятор выполняет обратное преобразование из строкового дампа строки в кодировке utf-8 в строку. Основание представления закодированной строки (16, 10 или 2 ) калькулятор может определить автоматически. В десятичном дампе обязательно разбиение строки на байты. В качестве разделителя можно использовать любой символ, например пробел.

UTF-8 в строку

Формат данных
Рассчитать
Ссылка Сохранить Виджет

Предыстория кодирования символов в строке

В старые добрые времена, когда компьютеры были ламповыми смартфонов не было, а объем памяти персональных компьютеров порой не превышал и одного мегабайта, для кодирования одного символа в строке хватало всего лишь одного байта. Первую «половину» байта занимали цифры, символы латинского алфавита, знаки пунктуации и другие полезные символы, все вместе известные как таблица ASCII. Вторую половину разработчики захватили для кодирования символов национальных языков. Захват происходил сразу с разных концов, независимыми специалистами, что привело к существованию нескольких различных кодировок даже для одного и того же языка (например для кириллицы существуют такие одно-байтовые кодировки: КОИ-8, CP866, ISO 8859-5, Windows-1251). Одно-байтовая запись любого символа была простой и очень удобной для разработчиков программ. Однако наличие различных кодировок порождало постоянные проблемы у пользователей: для корректного отображения текста нужно было знать в какой он кодировке , для каждой кодировки нужно иметь отдельные шрифты. Кроме того, выяснилось, что в мире существуют языки, где число символов заметно больше, чем 256, соответственно в один байт все символы этих языков уже не могли поместиться.

Юникод

Для решения вышеописанных проблем в 1991-м году придумали стандарт, описывающий универсальный набор всех символов — Юникод. В первой версии Юникода, насчитывалось 7161 символов 1 . Для кодирования этого числа символов достаточно 2-х байтов, что привело к расцвету 2-х байтовой кодировки UTF-16 в операционных системах и некоторых языках программирования. Оперировать двух-байтовыми символами в программах оказалось ни чуть не сложнее, чем одно-байтовыми. Однако радость разработчиков продолжалась всего 10 лет, версия 3.1 стандарта Unicode насчитывает в 13 раз больше символов, чем первая. Общее число символов достигло 94 205 и для их кодирования уже мало двух байтов. К моменту написания этой статьи последний стандарт Юникода 13.0 содержит 143 859 символов, и работы по добавлению новых символов не прекращаются. Простейшее решение проблемы — снова удвоить число байт для представления символов. Для этого имеется кодировка UTF-32, позволяющая закодировать 2 147 483 648 позиций.

UTF-8

Однако, всему есть предел. Расходовать 4 байта на один символ показалось слишком расточительным. Поэтому UTF-32 не стала столь популярной, как UTF-16. Вместо этого, сейчас наиболее популярна кодировка с переменной длиной символа UTF-8. UTF-8 появилась в 1992-м году и ранее использовалась преимущественно в unix-системах. Большое достоинство ее заключается в том, что текст, набранный латиницей, полностью совместим с 7-битной кодировкой ASCII, применяемой с 1963-года.
При помощи кодировки UTF-8 можно закодировать 2 097 152 символов, что почти в 15 раз больше текущего объема символов, описанных в Юникоде.
Для определения количества байт, требуемых для кодировки символа, используется от одного до 5-и старших бит 2 первого байта:

  • 0 — однобайтовый символ, соответствующий таблице ASCII, например Символ доллара
  • 110 — двух-байтовый символ, например Символ фунта
  • 1110 — трех-байтовый символ, например Символ евро
  • 11110 — четырех-байтовый символ, например Смайлик

Каждый последующий байт содержит 2-битовый маркер дополнительного байта: 10. Для получения позиции символа в Юникоде вспомогательные биты просто удаляются, оставшаяся битовая последовательность будет соответствовать номеру символа.

Почему для кодирования одного символа нужен именно 1 байт?

Почему для кодирования 1-го символа нужен именно 1 байт? Я прекрасно понимаю, что минимальная единица информации — 1 бит и чтобы выразить 255 символов в двоичном коде надо использовать 8 бит. И по таблице брать двоичный код и по нему находить нужный символ, но почему каждый символ обязательно занимает 1 байт? Зачем записывать число именно вот так 0000001 , а не просто 1 , тем самым заняв всего 1 бит информации и по таблице взять ему соответствующий символ.

Отслеживать
51.6k 201 201 золотой знак 65 65 серебряных знаков 246 246 бронзовых знаков
задан 1 авг 2018 в 17:23
Никита Антонов Никита Антонов
125 1 1 серебряный знак 9 9 бронзовых знаков

Байт — минимальная адресуемая единица информации. Хранить каждый символ меньше чем в одном байте неэффективно по скорости доступа. А для длительного хранения (при сохранении в файл, например) никто не мешает применить сжатие.

1 авг 2018 в 17:27
@insolor, Use the answer form, Luke!
– user207618
1 авг 2018 в 17:34
Символы не хранят в одном байте уже лет тридцать 🙂
1 авг 2018 в 17:36

А вообще теоретически использовать один бит не разрешает, только вот 11111111 — это один символ (число 255) или восемь символов 1 ? Придётся добавлять дополнительную информацию, поясняющую, как правильно интерпретировать эти единицы. Ну и да, использовать число битов меньшее чем «минимальная адресуемая единица информации» банально неудобно, ибо именно под восьмибитный байт спроектированы все современные компьютеры

1 авг 2018 в 17:39

@andreymal, о спасибо большое! Теперь дошло! Только вот еще вопрос тоесть большие последовательности в зависимости от кодировки делятся на определенное количество байт (1, 2 и тд) и уже по таблице находится определенные символы ?

1 авг 2018 в 17:42

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Не обязательно 1 ..есть кодировки (например utf-16, utf-32 ) где символы по 2 , по 4 байта. тут еще многое зависит от количества кодируемых символов. не всегда хватает 256 вариантов. часто нужно больше.то есть битность напрямую зависит от числа символов в таблице символов. Если влезть в ассемблер, то можно сделать свою таблицу символов. проблема будет только в том что твою кодировку будет понимать только твоя программа. А так просто принятый стандарт, и все. по поводу же адресации, да — опять же стандарт. хотя есть системы , которые работают и 9-ю битами ( старые советские системы связи) , где 9-й бит был или контрольным или знак передавал.

Отслеживать
ответ дан 1 авг 2018 в 17:35
Сергей Петрашко Сергей Петрашко
1,493 8 8 серебряных знаков 15 15 бронзовых знаков

Я наверное неправильно задал вопрос имею в виду почему все символы имеют 1 и тот же размер(тоесть 2 байта или 1), а не так чтобы 1 символ весит больше, а другой меньше, если все равно старшие разряды заполнены нулями (00000001 к примеру)

1 авг 2018 в 17:38

@НикитаАнтонов в кодировке UTF-8 длина одного символа может быть 1, 2, 3 или 4 байта 🙂 А использовать число бит, не кратное восьми, неудобно из-за архитектуры современных компьютеров, заточенных именно на 8 бит

1 авг 2018 в 17:40

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

4 байта сколько знаков

Есть Число, например 19553 его как-то надо записать в 4 байта.
Например
19553 в 2ичной системе 0000000000000000100110001100001 потом это добро поделить на байты 0000000 00000000 01001100 01100001 и каждый байт записать в строку в виде символа в итоге у этого числа получится следующая строка » La», то есть первые 2 байта нули в третьем 01001100 что соответствует L а в 4м 01100001 что соответствует a.
Как такой перевод реализовать в 1с 8.1?

Ну, так и реализовывай, какие проблемы?
главное — весь алгоритм знает, а что делать с алгоритмом не знает ))
(0) а смысл изначально в чем?

(0)[Как такой перевод реализовать в 1с 8.1]
Скрипт=СоздатьОбъект(«MSScriptControl.ScriptControl»);
Скрипт.language=»javascript»;
Математика=Скрипт.Eval(«Math»);
Ат=Математика.pow(2,Цел(Лог(а)/Лог(2)))+1; — и фигарь свои двоичные сдвиги и XOR

(1)(2) Какими функциями переводить из одного вида в другой.
(3) Формат выгрузки цен (цены в копейках).

(3) а где у тебя должно быть 4 байта? в какой системе?

(6) Есть число например что приводил я 19553, оно занимает 2 байта, 2 байта это 2 символа из ascii, каждый байт свой символ. А формат файла в который все это нужно записать (и из которого все это будет загружаться предполагает что число должно писаться в 4 байта) то есть в файл пишем два символа из ascii с 00000000, а потом два символа которые соответствуют числу 19553.

(7) 8-ка в уникоде, а не в асци
там символы по 2 байта
или в чем поблема?
Внимательно прочитай (0) и (7)

Так много цен передаёшь что не влазиют в файл и надо уменьшить разрядность клонки? Или куда передаёшь — там число, а не строка символов?

(13) У файла есть специальный формат, в котором цена должна занимать 4 байта, то есть при загрузке считывается 4 байта и получается число.

(14) Ну или функцию внешнюю для перевода используй?
Или сам 19553/16 и переводишь в 16-ую систему.
т.е. не получается записать символ с кодом 0?

Если кто еще не понял суть проблемы, то откройте калькулятор в винде, переведите его в инженерный режим, выберите Bin и 4 байта и введите 11111111111000000000000000000000
потом нажмите Dec получится 4292870144
потом Hex и получите FFE00000 вот эти 4 байта и надо записать в текстовый файл, побайтно.

(16) и это тоже
Вернее не в текстовый файл а просто в файл.
» La» — это текстовый файл. А тебе как раз нужно просто 16-е число.

(7) А в чем проблема как таковая? Если у тебя произвольный формат файла получается. Ты же сам его формируешь, так еще и сам его загружать после этого будешь.

Когда ты это 16-е число запихнешь в файл, то и получиль строку » La» при просмотре в текстовом редакторе или ХХХХh в HEX редакторе.

(20) Открой любой файл Блокнотом и увидишь текст.
(22) Можно подробнее.
(17) Так а проблема-то в чём? 4 байта в файл записать?
(22)(24) только при этом максимальное значение будет 65535
(24) Ага типа того.

(27) Вообще же конечно максимальное значение которое дает 16-я система при 4-байтном коде: FFFFFFFF, т.е. 4`294`967`295

(27) Байты в каком порядке должны идти?
(28) Вот. Так мне и надо представить число в 4-байтном коде и записать эти 4 байта в файл.
(30) только я еще раз прошу ответить на (21)
(21) Нет не произвольный.
Фигня какая то
(21) Был бы мой формат я бы не лучился.

(34) но если ты сам определяешь в каком виде будет формироваться файл (ты же в (0) вообще некую шифровку предлагал), то как опять же без переработки будет этот файл обрабатываться на приемнике?

(34) Ты чем его пишешь-то?
И в каком порядке у тебя байты числа должны идти?
пипец задача яйца выеденого не стоит
Конкретно Таблица товаров бинарный вид Goods.bin
задача яйца выеденого не стоит
(40) Ну так реши ее.
ну не умеет 1С с бинарниками работать.. пользуйся сторонними объекатми.. на vbscript попробуй
(42) в (4) предложено
ТС кроме флюда некуя не умееет

(39) В этом файле сказано, что имеется программка GoodsConverter, которая способна превратить goods.txt в goods.bin
Если не умеешь писать двоичные файлы — то что мешает воспользоваться этим несомненно полезным инструментом?

(44) Да не хотелось чем-то еще пользоваться, придется в в текстовом грузить. Просто текстовый грузится раз в 40 медленнее.

ну а деление на два слабо в цикле использовать просто??
и проверять на цело делиться или нет
(46) Не надо на 2. Надо на 256. Или даже на 65536
(46) тебе поможет
(50) ну а как из 11111111 или FF получить символ и записать его в файл?
(52) А зачем тебе двоичный или шестнадцатеричный _вид_, если у тебя есть _байты_?
(53) В смысле байты. У меня есть число.

(54) Есть число (например, оно называется Цена). Это число состоит из 4 байтов:
(Цена%256), (Цел(Цена/256)%256), (Цел(Цена/65536)%256), (Цел(Цена/16777216)).
(Или в каком порядке тебе они нужны?)

(45) И зачем тебе _грузить_ текстовый файл, если у тебя есть программка-_конвертер_, которая создаст .bin?

Ты паразитируешь что ли ?

//*******************************************
Процедура Сформировать()
Скрипт=СоздатьОбъект(«MSScriptControl.ScriptControl»);
Скрипт.language=»javascript»;
ФСО=СоздатьОбъект(«Scripting.FileSystemObject»);
Файл=КаталогПользователя()+»ЗадачаНеСтоитНиЧего.bin»;
Файл=ФСО.OpenTextFile(Файл,2,-1);
Скрипт.AddObject(«Файл»,Файл);
Стр=Скрипт.Eval(«new Number(19553)»);
Стр=Прав(«00000000″+Стр.toString(16),8);
Для Сч=0 По 3 Цикл
Скрипт.Eval(«Файл.Write(String.fromCharCode(Number(0x»+Сред(Стр,Сч*2+1,2)+»)))»);
КонецЦикла;
Файл.Close();
КонецПроцедуры

только скорее всего в обратном порядке и не стоит джабу использовать (будут проблемы)

//*******************************************
Процедура Сформировать()
Скрипт=СоздатьОбъект(«MSScriptControl.ScriptControl»);
Скрипт.language=»vbscript»;
ФСО=СоздатьОбъект(«Scripting.FileSystemObject»);
Файл=КаталогПользователя()+»ЗадачаНеСтоитНиЧего.bin»;
Файл=ФСО.OpenTextFile(Файл,2,-1);
Скрипт.AddObject(«F»,Файл);
Че=3435973836;
Если Че > 2147483647 Тогда
Че=Че-4294967296;
КонецЕсли;
Стр=Скрипт.Eval(«hex(«+(Че)+»)»);
Стр=Прав(«00000000″+Стр,8);
Сообщить(Стр);
Для Сч=0 По 3 Цикл
Сообщить(Сред(Стр,Сч*2+1,2));
Скрипт.Eval(«F.Write(chr(&h»+Сред(Стр,Сч*2+1,2)+»))»);
КонецЦикла;
Файл.Close();
КонецПроцедуры

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://czena.narkolog-na-dom-voronezh-11.ru/