04. august 2002 - 20:01Der er
30 kommentarer og 1 løsning
konvertering af 32bit float
Baggrund: Jeg er ved at udvikle et program, som henter oplysninger fra en CounterStrike-server. Blandt andet henter jeg oplysninger om spillerne: navn, antal frags OG HVOR LANG TID DE HAR SPILLET på serveren!
Hvad jeg ved: Jeg får returneret et byte[], hvori oplysninger for alle spillerne er. Følgende er skrevet af Valve, som har lavet spillet (i C++): for each active client (byte) client number / index (string) player name (int32) client's frag total (float32) client's total time in-game
Problemet: Jeg ved hvilke 4 pladser i mit byte[] jeg skal finde den 32bit float som beskriver, HVOR LANG TID EN SPILLER HAR SPILLET på serveren. Jeg ved bare ikke HVORDAN.
Kort: En 32bit float som skal konverteres til en tidsperiode i formatet hh:mm:ss
en 32bit float bør ligge over fire byte. det bør være sådan at hvis playerInfo er dit byte array er playerInfo[0] == clientNumber playerInfo[1] til playerInfo[playerInfo.length-9] == player name playerInfo[playerInfo.length-8] til playerInfo[playerInfo.length-5] == frag number playerInfo[playerInfo.length-4] til playerInfo[playerInfo.length-1] == in game time
uden dog at have NOGEN som helst erfaring eller indsigt.
en float32 hedder double i Java. prøv først at se hvor langt dit array er med .length. Hvis det svarer til mit bud (ungefähr 20 bytes) kan jeg sagtens bikse noget sammen.
stigc> det er mere henaf at lave en klasse public class CSPlayer { private byte user_nr; private String user_name; private long total_frag; private double game_time;
public CSPlayer(byte[] info) { // og saa videre } public String getName() { return this.user_name; } // og saa videre } gider bare ik' lave det hvis det kommer i et andet format.
der er altså lus i pelsen. hvis man vender det om x = ab[3]<<24 | ab[2]<<16 | ab[1]<<8 | ab[0]; giver det -98, uanset de andre tre bytes (efter hvad jeg lige kunne fuske mig til).
Nej client number er ikke 68, det tal ændre sig også, bare ret sjældent. Byte nr. 2 fra højre er ens 8 sekunder i træk, ændrer sig altså en gang 9. gang
en byte wrapper ved -128 (10000000) og 127 (01111111). Det er derfor relativt logisk at der går fra 127 til -128. Når byten står i nul 0 (00000000) tæller den næste også op, hvilket strengt taget også er logisk. Mit problem er nu, at jeg ikke ved hvorledes de fire bytes i en float er ordnet.
ja - det burde ikke have nogen effekt at and'e 255 på en byte
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.