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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.