Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
В PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например: typedef struct { unsigned int a: 4; unsigned int b: 16; unsigned int c: 4; unsigned int d: 2; unsigned int e: 6; } myDwordVariable; В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :( Подскажите пожалуйста наиболее удобный для моих целей вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:48 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
авторабор цифр известного максимального размера (в битах), что что есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 17:11 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например: typedef struct { unsigned int a: 4; unsigned int b: 16; unsigned int c: 4; unsigned int d: 2; unsigned int e: 6; } myDwordVariable; В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :( Подскажите пожалуйста наиболее удобный для моих целей вариант. мне этот факт стал интересен, спасибо, не знал что такое бывает. НО... Для чего Вам это... тем более в php? просто интересно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 19:03 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например: typedef struct { unsigned int a: 4; unsigned int b: 16; unsigned int c: 4; unsigned int d: 2; unsigned int e: 6; } myDwordVariable; В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :( Подскажите пожалуйста наиболее удобный для моих целей вариант. математические преобразования есть всегда. комьютер не понимает бита, сам проц вообщемто и байта не понимает. просто ты не делал этих операций. в пхп нету. вишь пхп гуру даже не знают что это такое. изобретай свой код... побитовые операции и битовый сдвиг есть. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 20:34 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
alex564657498765453nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например: typedef struct { unsigned int a: 4; unsigned int b: 16; unsigned int c: 4; unsigned int d: 2; unsigned int e: 6; } myDwordVariable; В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :( Подскажите пожалуйста наиболее удобный для моих целей вариант. математические преобразования есть всегда. комьютер не понимает бита, сам проц вообщемто и байта не понимает. просто ты не делал этих операций. в пхп нету. вишь пхп гуру даже не знают что это такое. изобретай свой код... побитовые операции и битовый сдвиг есть. :) Ну, это то да. Но учитывая, что такая структура хранения данных сказывается на производительности, думаю является логичным отсутствие данной возможности в php. Серверные технологии рассчитаны на большие нагрузки, а значит наклон идёт на увеличение производительности. По-этому я и спросил, я зачем это может потребоваться на php? Сервера не страдают от недостатка оперативки обычно, а значит и экономить, и вместо 16 бит тиснуться в 14 нету смысла :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 21:52 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453пропущено... математические преобразования есть всегда. комьютер не понимает бита, сам проц вообщемто и байта не понимает. просто ты не делал этих операций. в пхп нету. вишь пхп гуру даже не знают что это такое. изобретай свой код... побитовые операции и битовый сдвиг есть. :) Ну, это то да. Но учитывая, что такая структура хранения данных сказывается на производительности, думаю является логичным отсутствие данной возможности в php. Серверные технологии рассчитаны на большие нагрузки, а значит наклон идёт на увеличение производительности. По-этому я и спросил, я зачем это может потребоваться на php? Сервера не страдают от недостатка оперативки обычно, а значит и экономить, и вместо 16 бит тиснуться в 14 нету смысла :) ерунду написал. и нащот памяти, и нащот производительности. нащот памяти - а сегодня все компьютеры не страдают нехваткой оперативки чтоб два бита экономить. там где язык интерпретируемый, уже вопрос о производительности кода не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 00:37 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например: typedef struct { unsigned int a: 4; unsigned int b: 16; unsigned int c: 4; unsigned int d: 2; unsigned int e: 6; } myDwordVariable; В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :( Подскажите пожалуйста наиболее удобный для моих целей вариант. кстате учти ж. в пхп один целочисленый тип - интежер. а он может быть и 64 бита, и на сервере скорей всего так и есть. :) так что будешь баловаться таким образом - обязательно надо чтоб код определял разрядность микропроцессора. Но в пхп ини можно задавать разрядность интеджера. Так что лучше всего определять по типу если 0xFF+1 < 0xFF - 8bit tckb 0xFFFF+1 < 0xFFFF - 16bit etc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 00:43 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Интерпретация кода, вместо компиляции - это уже другое. Это политика openSource. Помню раньше читал, что собрались классные и умные человечки, и решили, что весь вэб будет на открытых кодах, что бы его было легко править, что бы он был передаваем (так как мало компаний пишут сайт и поддерживают его до последнего, а тем более частники). Но потом пришёл дядя Билл и сказал (как всегда впрочем) "да ну нафиг ваш стандарт" (эм... ну не так конечно, но смысл именно такой). И внедрил в вэб свою платформу ASP.NET, которая является компилируемой. Быстродейственной, но менее удобной для редактирования (не в плане кода, а в плане подготовки к редактированию и требующей установки платного продукта) и неперносимой на некоторые системы (ну или сложно переносимой... логично, ведь компилируемся :) ) Вот так. Так что интерпретация кода вместо его компиляции - это другой вопрос, обусловленный другими аспектами. Вынужденная потеря скорости. В плане же ресурсоёмкости и производительности, уклон делается на производительность, так как винчестера, оперативки у серверов сейчас "ё-маё" :) P.S. не в обиду тем, кто пишет на .NET, сейчас это тоже уже стандарт многими уважаем. Просто вот так всё было (по тем данным, которые попадались мне). Привёл в пример NET только для того, что бы показать обоснованность принятия решения интерпретации кода на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 00:56 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
авторASP.NET, которая является компилируемой. Эм? а дядя билл про это знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 01:34 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторASP.NET, которая является компилируемой. Эм? а дядя билл про это знает? думаю знает тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 01:42 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
и вы там ТОЧНО дальше первой строчки читали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 01:48 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrow, да, конечно читал. Объясните пожалуйста что не так говорю (исходя из данных в данной статье)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 01:52 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
тогда расскажите как у меня без всякой компиляции в DLL работает сайт? вот напрмер код главной: Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 01:56 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
вот прям так и работает, из текстовика, как PHP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 01:57 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrowвот прям так и работает, из текстовика, как PHP А Вы после изменения 1 буковки кода попробуйте зайти на сайт. Первый заход будет занимать больше времени, чем последующие. Это и будет компиляция кода сайта. Просто там код компилируется не программистом вручную, а автоматом при первом запуске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 02:01 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
Кстати, процедуру первого запуска видел лично, так как на смену мне в компанию, где я работал, пригласили программиста на NET платформу (хотели на php продолжить, но он реально классно шарит, по-этому решили с ним попробовать). Так вот, он мне лично показывал как это всё работает и объяснял, почему так долго запускается первый раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 02:04 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
так, с открытыми кодами разобрались. оказывается в самом что ни на есть пропиетарном Микрософте самые что ни на есть открыты коды. с компиляцией сами почитаете или тоже разберем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 02:09 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrow, К сожалению уже с телефона, потому пока отвечать не буду на прошлое сообщение, так как сложно аргументировать не давая ссылок нормальных. А вот по поводу компиляции, с радостью почитал бы Ваши доводы (по формулировке понимаю, что хотите поспорить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 02:27 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
быстро ты слился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 02:31 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Ну так ответь. Я то утром аргументы то подкачу свои. Не знаю как там у Вас, а тут в Москве 2.40 однако :). С чего мне ещё в такое время как не с телефона сидеть? Выпучив глаза перед компом? Нее. Явно не для меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 02:39 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrowтак, с открытыми кодами разобрались. оказывается в самом что ни на есть пропиетарном Микрософте самые что ни на есть открыты коды. с компиляцией сами почитаете или тоже разберем? Итак, с открытыми кодами и компиляцией... Надеюсь английский знаем... Итак, ссылки: общие положения публикации сайтов на asp.net возможные варианты публикации сайтов на asp.net не просто откуда-то, а с оригинального сайта msdn.microsoft.com. Так Вот, давайте обсудим официальные ссылки, документации к продукту... а то "у меня" - это не дело... ))) Вы могли просто сайт публиковать вместе с кодами (читаем... там есть такая возможность). Очень хочу увидить, что на это ответите... Вы вывели какую-то непонятную "истину" и обвинили меня в неправоте, даже не почитав ссылку видимо (где несколько раз повторяется, что код не является открытым и что он компилируется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 08:17 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. а что там гуглить? открываем доку поддерживаемых типов и видим, что пхп поддерживает а что нет если прочитаете ссылку выше, то поймете что dword как тип пхп неподдерживает. но. если нельзя но очень хочется - то можно. битовые сдвиги есть, для упаковки читаем про функции pack() / unpack() флаг L и т.д. можно написать свой класс, который будет на лету это делать, либо поищите готовый, может уже ктото реализовал, может даже в виде расширения к пхп... а вообще пхп высокоуровневый язык, если вы успели заметить, и он не особо заточен для работы напрямую с битами. но коечто делать позволяет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 05:51 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
r u, поддержу. Есть все побитовые операции. Там даже отдельного класса генерить особо и не надо, а зачастую и не требуется. По-поводу "ненужной экономии двух байт": не соглашусь. "Копейка - рупь бережет". На серверах, из-за такого подхода, как правило мозгов не хватает уже при мало-мальски серъезной нагрузке. Ни при какой оперативе. Это большой миф Г-кодеров в своё оправдание. Как пример: побайтное хранение каких=нибудь "статусов" - можно в БД выделить тип boolean или что ещё в один байт. Казалось бы "нафига экономить" и лепить побитовые операции? Однако: при количестве статусов, хотя бы 8 штук, имеем 8 полей. Как правило "статус" - это такая фигня, которая часто ограничивает условия выборки (и отдай мне те, которые ещё не проверены, или ещё не удалены и т.п.)... но на 8 полей, уже приходится накладывать индекс на каждое(!) поле, что уже далеко не один байт на поле... ... и это как ни странно, только "начало": далее надо усложнять запросы, добавляя условия по И/ИЛИ на каждое отдельное поле... удлинять ширину выборки (несколько полей), что уже "внезапно" значительно снижает скорость отдачи (даже по внутреннеей петле сетевого интерфейса - он все равно используется и яваляется самым узким местом в связках "БД - клиент"), усложнять логику клиента, поскольку результат - уже несколько полей объекта "Запись" к примеру и проверки надо вести также расширяя код по И/ИЛИ... а, учитывая что ПХП выделяет память блоками по килобайту и более... рост потребляемой памяти может и вовсе оказаться несоизмеримым. ... в то же время, хранение битовым набором - поддерживается большинством БД (даже в Мускуле есть тип данных set - до 64 бит, а в varbinary - ваще можно "скока угодно"), и "сложность" задачи - это просто банальное незнание и нежедлание узнать работу с битовыми операциями и логическими выражениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 08:37 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453, Интерпретация кода, вместо компиляции - это уже другое. Это политика openSource. Помню раньше читал, что собрались классные и умные человечки, и решили, что весь вэб будет на открытых кодах, что бы его было легко править, что бы он был передаваем (так как мало компаний пишут сайт и поддерживают его до последнего, а тем более частники). Но потом пришёл дядя Билл и сказал (как всегда впрочем) "да ну нафиг ваш стандарт" (эм... ну не так конечно, но смысл именно такой). И внедрил в вэб свою платформу ASP.NET, которая является компилируемой. Быстродейственной, но менее удобной для редактирования (не в плане кода, а в плане подготовки к редактированию и требующей установки платного продукта) и неперносимой на некоторые системы (ну или сложно переносимой... логично, ведь компилируемся :) ) Вот так. Так что интерпретация кода вместо его компиляции - это другой вопрос, обусловленный другими аспектами. Вынужденная потеря скорости. В плане же ресурсоёмкости и производительности, уклон делается на производительность, так как винчестера, оперативки у серверов сейчас "ё-маё" :) P.S. не в обиду тем, кто пишет на .NET, сейчас это тоже уже стандарт многими уважаем. Просто вот так всё было (по тем данным, которые попадались мне). Привёл в пример NET только для того, что бы показать обоснованность принятия решения интерпретации кода на сервере. да какая нафиг переносимость. исходни если есть то и в перёд, а если нету..ну так наврено нельзя переносить куда хочеться - это чьёто. а вот что для опенсорса это полезно, то да... ибо ктото может начинать распространять скомпиленый без исходников...и вроде опен сорс, можешь делать что хочешь, ну или с ошибками исходники... а реально совершенно левые смогут на себя тянуть одеяло.. так что нащот переносимости не соглашуссь, а вот опенсорс - поддержвию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 10:21 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ПрограмёрПо-этому я и спросил, я зачем это может потребоваться на php? Сервера не страдают от недостатка оперативки обычно, а значит и экономить, и вместо 16 бит тиснуться в 14 нету смысла :) Вопрос не в экономии. Веб-приложение должно по определённым правилам генерить 4-ёх байтовый номер для устройства, в который должны быть заложены некоторые его параметры. Параметров 6, при этом разных размеров, и без разбиения по битам их в 4 байта не вставить ) Arhat109r u, поддержу. Есть все побитовые операции. Там даже отдельного класса генерить особо и не надо, а зачастую и не требуется. Да побитовые операции - это понятно. Они где угодно есть. Вопрос заключался в том, есть ли в PHP что-то столь же удобное для работы с битовыми полями как в Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 11:13 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, По поводу переносимости... Знал это только со слов, так как уже говорил, asp.net ни разу не юзал. Потому решил загуглить... и вот первая же открытая ссылка (кроме тех, где на 10 страницах рассказывается как настроить linux сервер под работу с asp) английское обсуждение (сорри... русского не нашёл) Как видим, в любой момент можно столкнуться с ситуацией, когда написанный на asp.net проект (в windows) не запуститься в linux (так как в линуксе mono поддерживает малую часть функций данного фреймворка) P.S. Не забываем, что mono - это не продукт от майкрософта, а значит можно считать, что .net не переносима на линукс сервер (ведь mono - это бесплатная штука, которую в любой мемент могут перестать разрабатывать и поддерживать и всё :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 11:23 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nop. Вопрос заключался в том, есть ли в PHP что-то столь же удобное для работы с битовыми полями как в Си. стольже удобного - НЕТ, но это возможно. но придется многое делать вручную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 11:39 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nopДа побитовые операции - это понятно. Они где угодно есть. Вопрос заключался в том, есть ли в PHP что-то столь же удобное для работы с битовыми полями как в Си. Насколько мне известно, ничего подобного в php нету... Но учитывая, что размер структуры меньше размера integer: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. В принципе за 5 минут писано... Может где ошибся, не проверял... По аналогии (только легче немного) чтение по маске... Маски предопределяем в классе (для удобства)... и всё. Вот удобный инструмент (ограничивающийся размеров integer). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 12:04 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
да... как чувствовал, что ошибся )) написал: Код: php 1. а надо: Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2013, 13:13 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ПрограмёрnopДа побитовые операции - это понятно. Они где угодно есть. Вопрос заключался в том, есть ли в PHP что-то столь же удобное для работы с битовыми полями как в Си. Насколько мне известно, ничего подобного в php нету... Но учитывая, что размер структуры меньше размера integer: Как меньше? Все битовые поля структуры в сумме занимают 4 байта. Но в принципе не суть. Програмёр Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. В принципе за 5 минут писано... Может где ошибся, не проверял... По аналогии (только легче немного) чтение по маске... Маски предопределяем в классе (для удобства)... и всё. Вот удобный инструмент (ограничивающийся размеров integer). Извиняюсь за нубство (я в основном системный программист и на PHP практически не писал), но можно немного пояснить код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 11:26 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nopИзвиняюсь за нубство (я в основном системный программист и на PHP практически не писал), но можно немного пояснить код? что именно вам непонятно? ветвление, цикл, операции арифметические,логические, битовые сдвиги... или сам алгоритм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 11:41 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nopИзвиняюсь за нубство (я в основном системный программист и на PHP практически не писал), но можно немного пояснить код? Хм... Ну каг бы... )) это вообще-то какраз ближе к системному программированию, чем к php (из php тут только синтаксис :) ). Я уже несколько лет в php программирую, но мне только 1 раз приходилось делать подобное. А вот как раз знаю как это делать, потому что в своё время сильно увлёкся asm'ом и за месяц перечитал кучу всякой инфы об низкоуровневой работе с памятью (и многое другое). Алгоритм тут простой: задаём маску для каждого значения в структуре. на вход в функцию получаем число и маску. Потом определяем на сколько бит надо сместить число, которое подали (ведь, если число 0xA9, а маска 0xFF00, то в итоге наше значение должно быть записано как 0xA000). А дальше одной командой очищаем те биты в структуре, которые хотим записать, и выполняем сложение (логическое) с поданным на вход числом, смещённым и пропущенным через маску. Думаю Вы должны понять, по какому принципу я предопределил маски, но если вдруг не понятно - пишите. P.S. в данном случае структура меньше интежера. Тут вся штука в том, что в php тип int подразумевает (по умолчанию, как уже заметили можно и изменить) что-то подобное прикладному longint или даже int64 (не уверен... не проверял размерность никогда... 32bit вполне достаточно было). Так что в данном случае указанная структура легко поместиться в integer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 12:26 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
ведь, если число 0xA9, а маска 0xFF00, то в итоге наше значение должно быть записано как 0xA000 0xA900 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 12:49 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
Спасибо, в коде разобрался :) Вроде бы работает как надо (при тестировании, проверял калькулятором), в реальных условиях пока не проверил. ПрограмёрP.S. в данном случае структура меньше интежера. Тут вся штука в том, что в php тип int подразумевает (по умолчанию, как уже заметили можно и изменить) что-то подобное прикладному longint или даже int64 (не уверен... не проверял размерность никогда... 32bit вполне достаточно было). Так что в данном случае указанная структура легко поместиться в integer. А вот этого понять не могу. В вашей же структуре маска 0xFC000000 смещает на последние 6 бит из 32-ух. Соответственно если я по этому смещению запишу 0x3F, то как получившееся число может получиться меньше 4ёх байт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2013, 15:23 |
|
||
|
Битовые поля в PHP
|
|||
|---|---|---|---|
|
#18+
nop, в моём сообщении "меньше" стоит понимать как "меньше или равно" :) В указанном Вами случае получится заполнение ровно 4-ёх байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2013, 16:35 |
|
||
|
|

start [/forum/topic.php?all=1&fid=23&tid=1463691]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 347ms |

| 0 / 0 |
