php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.08.2011, 17:34  
Neuer Benutzer
 
Registriert seit: 22.08.2011
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
hephaistos befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] PHP -> int to uint

Hallo,

ich bin heute auf ein Problem gestoßen, das ich nicht verstehe/lösen kann.
In einer MySQL Datenbank hab ich folgenden Wert:
-1371623843

Dieser Wert ist eigentlich ein "unsigned int": 2923343453
binär: 10101110001111101010111001011101
Nun konvertiere ich den "-1371623843" mit:
Code:
$x = sprintf("%u", $val);
Dann erhalte ich ein:
Code:
var_dump($x);
string(10) "2923343453"
Soweit so gut, aber ich kann diesen String nicht nach "int" konvertieren bzw. "Bit-Operationen" darauf anwenden. Dabei erhalte ich IMMER alle 31-bit gesetzt (=2147483647).
also zB
Code:
echo $x & 0x0000FFFF;
Hat jmd. eine Idee, was ich falsch mache?

danke, stefan

Geändert von hephaistos (22.08.2011 um 17:35 Uhr). Grund: 32 statt 31 bit geschrieben...
hephaistos ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.08.2011, 17:39  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.631
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

http://php.net/manual/de/language.types.integer.php

Der Abshcnitt unter "Integer overflow" dürfte für dich relevant sein.

PHP kennt "unsigned" Ints so nicht, versuch dein Glück mit Floats.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 22.08.2011, 18:44  
Neuer Benutzer
 
Registriert seit: 22.08.2011
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
hephaistos befindet sich auf einem aufstrebenden Ast
Standard

Auf den "überlauf" bin ich auch endlich draufgekommen
danke!

ich habs nun so gelöst:
Code:
    function uintval($val)
    {
        $val = sprintf("%u", $val);
        if ( bccomp($val, PHP_INT_MAX) >= 0 ) {
            $val = bcsub($val, PHP_INT_MAX*2+2);
        }
        
        return intval($val);
    }
Das kümmert sich um den Überlauf.
Um nun die 1. bzw. 2. 16 Bit zu lesen hab ich:

Code:
echo $uintval & 0x0000FFFF; // 1. 16 Bit
echo ($uintval >> 16) & 0xFFFF; // 2. 16 Bit
So hauts hin. danke
hephaistos ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php uint, int to uint, uint php, php int, to uint php, uint to int php, unsigned integer php, uint integer, php to uint, uint, int uint, uint in int problematisch, php \>\ in html, (uint) php, php >, php &gt ?, uint nachint convertieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum