Konvertera Hexadecimal till Decimalt - Optimering

PHPportalen Forum Index » PHP
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Azreal
Administratör



Medlem i: 4915 dagar
Från: Uppsala, bor i Göteborg
Status: Offline



#742425
Inlägg Skrivet: 2019-01-08 11:56      Ämne: Konvertera Hexadecimal till Decimalt - Optimering Citera

Hej,

Jobbar med ett udda projekt där jag måste typkonvertera en hexadecimal sträng till decimal.
Dokumentationen säger att jag måste göra detta:
Citat:
An array of bytes, where every 2 bytes are written using a little endian representation of an unsigned short.
VARBINARY(0xDC1FD91F) == bytes { 0xDC, 0x1F, 0xD9, 0x1F } == ushort { 0xDC1F, 0xD91F } -> Byte Swap -> ushort {0x1FDC, 0x1FD9 } == wave samples [8156,8153]


Vilket jag har löst genom att göra såhär:
PHP:
1:
 
2:
<?php
3:
 
4:
// Raw Data one block of ECG Sample from MSSQL database.
5:
$hexData "0x1F8B0800000000000400ED5DF79F254771DFBCFB766FF7EEF6C2EE059842446382C8D1269B6872C6D80401260A4C3602042688203216";
6:
 
7:
function WaveformHexToDecimal($HexData,$Json false$SampleSpeed 500){
8:
   //Setup array to collect data
9:
   $result = array();
10:
   // Clean 0x from the beginning of the hexsequence, maybe use regexp instead @todo
11:
   $HexData substr($HexData,2);
12:
   // We need to flip the byte order.
13:
   preg_match_all("/(..)(..)/",$HexData,$hits);
14:
   // Put the byte order back      
15:
   for($i 0$i count($hits[1]); ++$i) {
16:
         $result[] = $hits[2][$i].$hits[1][$i];
17:
   }
18:
   // Alright, Convert to decimal instead of hex.
19:
   $result array_map("hexdec",$result);
20:
   // Do you want Json?
21:
   if($Json === true){
22:
      
23:
      return json_encode($result);
24:
   }
25:
 
26:
   return $result ;
27:
    
28:
}


Spontant tänker jag att det borde gå att göra mer effektivt. Några tips på hur?
 

_________________
Konsultation via PM, inte gratis.
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Tarre



Medlem i: 4981 dagar

Status: Offline



#742466
Inlägg Skrivet: 2019-02-03 13:50      Ämne: Citera

Hej, detta är vad jag kom fram till på kort varsel.

Från ~0.015 msec till ~0.009 msec

php 7.1 @ windows

PHP:
1:
 function WaveformHexToDecimal(string $hexbool $json false)
2:
        {
3:
            $hex preg_replace('/([0-9a-fA-F]{2})([0-9a-fA-F]{2})/''$2$1|'$hex);
4:
            $hex rtrim($hex'|');
5:
            $result array_map('hexdec'explode('|'$hex));
6:
            return $json json_encode($result) : $result;
7:
        } 


Det finns möjlighet att få bort rtrim genom att förbättra regexen.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Azreal
Administratör



Medlem i: 4915 dagar
Från: Uppsala, bor i Göteborg
Status: Offline



#742471
Inlägg Skrivet: 2019-02-06 15:55      Ämne: Citera

Hej,

Intressant lösning, testade en liknande lösning med regexp såsom du har gjort men är ingen höjdare på regexp därav uteblivet resultat =)
En kollega löste det via VisualBasic på följande sätt:
KOD:
1:
 
2:
i = 1
3:
 
4:
while i<=len(source)
5:
 
6:
   hexVal = mid(source,i+2,2)+mid(source,i,2)       'Little endian, so switch character 12 with 34 (0120 becomes: 2001)
7:
 
8:
    output = output & clng("&H" & hexVal) & " "    'convert Hex to decimal
9:
 
10:
   i=i+4                            'every 4 characters is 1 value.
11:
 
12:
wend
 

_________________
Konsultation via PM, inte gratis.
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic