簡體   English   中英

C ++高效解析十六進制char數組

[英]c++ parsing hex char array efficiently

我正在嘗試找出如何使用c ++ 98最有效地將以下內容解析為Hex段。

//One lump, no delemiters
char hexData[] = "50FFFEF080";

並想將50 FF FE和F080(假設我知道hexData每次都將采用這種格式)解析為以10為基數。結果如下:

var1=80
var2=255
var3=254
var4=61568

這是一種策略。

  1. 一次將一個必需的字符復制到一個臨時字符串。
  2. 使用strtol提取數字。

程序:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   char hexData[] = "50FFFEF080";
   int i = 0;
   int var[4];
   char temp[5] = {};
   char* end = NULL;
   for ( i = 0; i < 3; ++i )
   {
      temp[0] = hexData[i*2];
      temp[1] = hexData[i*2+1];
      var[i] = (int)strtol(temp, &end, 16);
      printf("var[%d]: %d\n", i, var[i]);
   }

   // The last number.
   temp[0] = hexData[3*2];
   temp[1] = hexData[3*2+1];
   temp[2] = hexData[3*2+2];
   temp[3] = hexData[3*2+3];
   var[3] = (int)strtol(temp, &end, 16);
   printf("var[3]: %d\n", var[3]);

   return 0;
}

輸出:

var[0]: 80
var[1]: 255
var[2]: 254
var[3]: 61568

您可以將所有字符串轉換為數字,然后使用按位運算來獲取任何字節或位。 嘗試這個

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
   char hexData[] = "50FFFEF080";
   uint64_t number; // 64bit number
   // conversion from char-string to one big number
   sscanf(hexData, "%llx", &number); // read as a hex number
   uint64_t tmp = number; // just a copy of initial number to make bitwise operations
   // use masks to get particular bytes
   printf("%lld \n", tmp & 0xFFFF); // prints last two bytes as decimal number: 61568
   // or copy to some other memory
   unsigned int lastValue = tmp & 0xFFFF; // now lastValue has 61568 (0xF080)
   tmp >>= 16; // remove last two bytes with right shift
   printf("%lld \n", tmp & 0xFF); // prints the last byte 254
   tmp >>= 8; // remove lass byte with right shift
   printf("%lld \n", tmp & 0xFF); // prints 255
   tmp >>= 8; // remove lass byte with right shift
   printf("%lld \n", tmp & 0xFF); // prints 80
   return 0;
}
#include <iostream>
#include <string>

int main() { 

    std::istringstream buffer("50FFFEF080");

    unsigned long long value;

    buffer >> std::hex >> value;

    int var1 = value & 0xFFFF;
    int var2 = (value >> 16) & 0xFF;
    int var3 = (value >> 24) & 0xFF;
    int var4 = (value >> 32) & 0xFF;    

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM