Количество байт в строке
Немного может быть глупый вопрос, но я что-то не нашел ничего.
В общем, как определить количество байт в строке? Именно байт, а не символов. Локаль UTF8. Язык — Си. Желательно работа с типом gchar (gtk).

hibou ★★★★★
02.07.10 06:42:02 MSD
dmitry_vk ★★★
( 02.07.10 07:23:21 MSD )
Ответ на: комментарий от dmitry_vk 02.07.10 07:23:21 MSD

интересно sizeof()-1 даст тот же результат?!
Boy_from_Jungle ★★★★
( 02.07.10 09:22:01 MSD )
Ответ на: комментарий от Boy_from_Jungle 02.07.10 09:22:01 MSD

#include #include int main (int argc, char *argv[])
$ ./test sizeof(string1) is 4 sizeof(string2) is 13 strlen(string1) is 12 strlen(string2) is 12
А автору темы нужен strlen()+1, видимо.
tim239 ★★
( 02.07.10 09:39:31 MSD )
Ответ на: комментарий от Boy_from_Jungle 02.07.10 09:22:01 MSD

>интересно sizeof()-1 даст тот же результат?!
sizeof от указателя даст размер указателя, который никак не коррелирует с размером куска памяти, который мы именуем строкой.
yoghurt ★★★★★
( 02.07.10 10:22:22 MSD )

Как уже сказали, strlen. gchar это typedef char, так что все стандартные сишные функци работают.
MuZHiK-2 ★★★★
( 02.07.10 10:29:45 MSD )
Ответ на: комментарий от MuZHiK-2 02.07.10 10:29:45 MSD

strlen при UTF-8 локали считает символы, а не байты.
hibou ★★★★★
( 02.07.10 15:28:35 MSD ) автор топика
Ответ на: комментарий от hibou 02.07.10 15:28:35 MSD

Извините, был неправ! Действительно, работает!
hibou ★★★★★
( 02.07.10 15:33:47 MSD ) автор топика
Ответ на: комментарий от hibou 02.07.10 15:28:35 MSD
Это где такое написано, если не секрет? Наоборот, обычно спрашивают, как посчитать количество символов в utf8-строке, потому что strlen считает количество байт.
> echo $LANG ru_RU.UTF-8 > echo '#include #include int main() ' | gcc -x c - > ./a.out 12
Laz ★★★★★
( 02.07.10 15:35:12 MSD )
Ответ на: комментарий от Laz 02.07.10 15:35:12 MSD

Ага, я давно уже ничего не программировал. Вспоминаю потихоньку.
hibou ★★★★★
( 02.07.10 15:44:10 MSD ) автор топика
Ответ на: комментарий от hibou 02.07.10 15:33:47 MSD
В UTF-8 могут быть управляющие символы с нулём, на которых strlen и остановится.
alex_custov ★★★★★
( 02.07.10 23:16:47 MSD )
Ответ на: комментарий от alex_custov 02.07.10 23:16:47 MSD

>В UTF-8 могут быть управляющие символы с нулём
Можно хоть один пример? 😀 Ты не путай с UTF-16 символами.
В UTF-8 всё, что не ASCII — всё с установленным старшим битом. Более того, в этой кодировке сразу ясно что это, ASCII-символ (0xxxxxxx), начальный байт многобайтового символа (11xxxxxx) или последующий байт многобайтового символа (10xxxxxx).
KRoN73 ★★★★★
( 02.07.10 23:23:18 MSD )
Ответ на: комментарий от KRoN73 02.07.10 23:23:18 MSD
ах да, видимо я что-то перепутал, надо обновиться
alex_custov ★★★★★
( 03.07.10 00:44:23 MSD )
Ответ на: комментарий от yoghurt 02.07.10 10:22:22 MSD

угу, понял. я имел ввиду не указатель
JavaScript | Размер строки в байтах
В современных системах 1 символ строки занимает 1 байт информации.
1 символ = 1 байт
Как узнать размер строки в JavaScript?
В этом нам поможет конструктор Blob. Для надёжности.
У нас есть строка:
var stroka color: #993300;">https://efim360.ru"
Создадим «Большой Двоичный Объект»:
new Blob([stroka])
Нам вернётся объект-прототип класса Blob

У этого объекта есть свойство size, которое указывает на размер строки в байтах. К нему можно обратиться.
new Blob([stroka]).size
В ответ мы получим значение 18
как узнать сколько байтов в hex строке
Подскажите как узнать сколько байтов в строке записанной в hex, есть необходимость валидировать ethereum кошелек, длинна каждого кошелька равно 20 байтам но как это реализовать на python не пойму пробовал так:
eth = 0xf8e1f68d15e0db4e31adaed3eb0a89c1513c6dd2 print(eth.bit_length()) 156
что совсем не то что должно быть. Спасибо.
Отслеживать
задан 18 янв 2018 в 15:05
Alexandr Vasilenko Alexandr Vasilenko
366 2 2 серебряных знака 12 12 бронзовых знаков
у вас тут мешанина типов. В заголовке вы говорите о «hex строке». В коде у вас int объект из hex literal создаётся (в Питоне str и int это совсем разные вещи). Для которого вы количество [необходимых] бит выводите. Что у вас на входе? Что вы хотите на выходе точно? К примеру: «00» что у вас должно возвращать? 0 или 1 или 2?
18 янв 2018 в 15:12
Каждые два символа [A-F][0-9] представляют один байт. Так что длину строки делите на два
18 янв 2018 в 15:27
на входе у меня строка полученная из формы на сайте, посоветуйте как мне лучше поступить ?? print(hex(eth).__len__()) выводит 41, даже если я разделю на 2 получится 20,5 а должно быть 20
18 янв 2018 в 15:28
@AlexandrVasilenko а в приведенном коде у вас НЕ строка.
18 янв 2018 в 15:29
eth = «0x0d18B2a0901FF0048Cc36F7a6C2297FBb05B68e6» print(hex(int(eth,16)).__len__()) выводит все равно 41
18 янв 2018 в 15:33
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
>> eth = 'f8e1f68d15e0db4e31adaed3eb0a89c1513c6dd2' >> s = bytearray.fromhex(eth) >> print(s) bytearray(b'\xf8\xe1\xf6\x8d\x15\xe0\xdbN1\xad\xae\xd3\xeb\n\x89\xc1Q> len(s) 20
При этом, если в строке будут невалидные hex-значения или будет нечётное число символов, то при конвертации получите ошибку. И это автоматически будет означать, что номер кошелька невалиден.
Если же ошибки не возникло и длина оказалась равна 20, то всё валидно.
Сколько байт в строке
Всем привет, собственно вопрос в названии темы
$str = «123»;
?>
Как посчитать количество байт? какими функциями?
6.11.2012 — 21:23
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться — его святое право.
Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

6.11.2012 — 21:24
а вы в етом вобще уверены?
если возьмём обычную строку 123
то strlen($str) = 3 байта
насколько я понял 1 Байт = 8 бит
если например цифра 1 в битах имеет значение 0001
2 = 0010
3 = 0011
то в итоге получим
000100100011 — 12 бит или 1 байт и 4 бита но не как не 3 байта
может я чегото не понимаю?
6.11.2012 — 21:28
| Цитата |
| может я чегото не понимаю? |
Именно. Потому что вопрос недвузначный:
| Цитата |
| есть строка |
А цифры в строковом представлении 1 символ — 1 байт.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться — его святое право.
Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

6.11.2012 — 21:36
ну так, 1 байт и серовно в битах имет такой вид 000100100011
а если строка равна 123ABC
A 1010
B 1011
C 1100
ето равно 24 бита или 3 байта, а strlen($str) покажет 6 как тогда быть?
7.11.2012 — 01:46
| Цитата (qaz333 @ 6.11.2012 — 17:36) |
| ну так, 1 байт и серовно в битах имет такой вид 000100100011 |
а если строка равна 123ABC
A 1010
B 1011
C 1100
Сколько байт в строке ‘Меня зовут Вася’?
Игорь_Vasinsky
7.11.2012 — 01:48
а чё эт д. Коль на юникод забил?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
7.11.2012 — 02:22
7.11.2012 — 04:40
Вы чего? Какой юникод. Человеку нужны байты, а не символы.
Чтим мануал:
| Цитата |
| strlen() returns the number of bytes rather than the number of characters in a string. |
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться — его святое право.
Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

Игорь_Vasinsky
7.11.2012 — 07:23
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker