Неподписанный интервал к вошел в систему php

Как уже упоминалось в комментарии Джерри, вы получите краткий учебник о том, как создавать гистограмму с накоплением. Например, , этот .

Поскольку ваши данные очень малы, я продемонстрирую, как это сделать быстро и просто:

  • Сначала вам нужно правильно настроить данные, например:

[1125 ] enter image description here

  • Во-вторых, вам нужно выбрать диапазон ячеек A1 - C9 и выбрать столбчатую диаграмму с накоплением под диаграммами (также показано в ссылке выше).

  • Это создаст вашу гистограмму с накоплением

enter image description here

  • Теперь нажмите на синяя полоса, поэтому она выделяет эту серию и меняет цвет на зеленый:

enter image description here

  • Затем нажмите вправо по вертикали По оси и по опциям выберите max и unit 338, см. скриншот ниже (на голландском, но вы поймете):

enter image description here [ 1130]

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

enter image description here [1114 ]

  • Конечный продукт:

enter image description here

5
задан Thinker 2 June 2012 в 00:35
поделиться

3 ответа

PHP не поддерживает целые числа без знака как тип, но вы можете просто превратить результат ip2long в строку int без знака , имея sprintf интерпретировать значение как беззнаковое с помощью % u :

 $ip="128.1.2.3";
 $signed=ip2long($ip);             // -2147417597 in this example
 $unsigned=sprintf("%u", $signed); //  2147549699 in this example

Edit, поскольку вы действительно хотели, чтобы оно было подписано даже в 64-битных системах - вот как вы преобразовали бы 64 значение бит + ве для 32-битного эквивалента со знаком:

$ip = ip2long($ip);
if (PHP_INT_SIZE == 8)
{
    if ($ip>0x7FFFFFFF)
    {
        $ip-=0x100000000;
    }
}
15
ответ дан 18 December 2019 в 07:31
поделиться

-Непонятная проблема, см. Ответ Пола Диксона выше.


64-битные целые числа без знака технически не поддерживаются в PHP5. Он будет использовать собственный тип. Чтобы преобразовать в 32-битное подписанное int из 64-битного подписанного int без потери старшего бита, вы можете замаскировать, а затем ввести приведение вывода:

$ip_int = ip2long($ip);
if (PHP_INT_SIZE == 8) // 64bit native
{
  $temp_int = (int)(0x7FFFFFFF & $ip_int);
  $temp_int |= (int)(0x80000000 & ($ip_int >> 32));
  $ip_int = $temp_int;
}

В 64-битной системе при печати этого значения ($ ip_int) будет отображаться 'unsigned' целое число, поскольку мы удалили старший бит. Однако это должно позволить вам взять результат и сохранить его так, как вы хотите.

1
ответ дан 18 December 2019 в 07:31
поделиться
[

]Fwiw, если вы используете MySQL, то обычно гораздо проще и чище, если вы просто передаете IP как строки в базу данных, и позволяете MySQL делать преобразование с помощью INET_ATON() (когда INSERTing/UPDAT(E)'ing) и INET_NTOA() (когда SELECTing). В MySQL нет ни одной из описанных здесь проблем.[

] [

]Примеры:[

] [
SELECT INET_NTOA(ip_column) FROM t;

INSERT INTO t (ip_column) VALUES (INET_ATON('10.0.0.1'));
] [

]Запросы также намного более читабельны.[

] [

]Обратите внимание, что вы можете []не[] смешивать INET_NTOA()/INET_ATON() в MySQL с ip2long()/long2ip() в PHP, так как MySQL использует тип данных INT UNSIGNED, в то время как PHP использует []подписанное[] целое число. Смешивание подписанных и неподписанных целых чисел серьезно испортит ваши данные![

].
3
ответ дан 18 December 2019 в 07:31
поделиться
Другие вопросы по тегам:

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