2014-11-05 71 views
-3

strtol將是我的計劃,我想這是非常快的很慢功能

非常緩慢,比如我有這個字符串:

PCHAR ex = "\x55\xEC" etc... 

他們是十六進制,所以如果我想寫它沒有「\ x」來像「55 EC」等。我必須使用與strtol,但strtol將是我的程序非常慢我想在我的程序最快的國家之一..

I use strtol like (CHAR)strtol(ex, &ex, 16); 

心靈請幫我嗎?

+1

你到底想幹什麼?顯示沒有0x前綴的數組? – 2014-11-05 07:23:15

+0

這是爲你編譯的嗎?當'ex'是一個數組時,將'&ex'作爲第二個參數傳遞是沒有意義的。 – Blastfurnace 2014-11-05 07:24:31

+0

噢,對不起,是'PCHAR EX = 「\ X55 \ XEC」;' 所以我想要做的是:沒有\ X 所以這將是輸入十六進制字符:'PCHAR EX = 「55 EC」 ' 之後使用strtol的alt將它改爲'\ x55 \ xEC' – Frought 2014-11-05 09:45:21

回答

0

你在想什麼? strtol將字節字符串轉換爲長整數;當字符串有0x作爲前綴時,它將該字符串視爲十六進制數字。它不會將\x55轉換爲55。假設三個錯誤:

  • 它會將0x55轉換爲55。不,它會將它轉換成85(十進制)
  • 它會轉換多個字符串中的數字。不,它會將字符串中的一個數字轉換爲longlong long
  • 它將採用\x格式的十六進制數。不,這應該是0x,因爲它將它識別爲十六進制值

你有什麼不是strtol的用例。您必須手動進行轉換。

所有你需要的只是找到所有\x與空間的查找替換和修剪產生的字符串颳去領先的空間。

+0

我想將55本身轉換爲0x55 ^^ – Frought 2014-11-05 09:08:44

1

我會做這樣的事情:

unsigned long ex[] {0x55, 0xEC}; 

    for (auto i : ex) 
    std::cout << std::hex << i << " "; 

輸出是:55 EC

+0

你讓我錯了,我想輸入像「55 EC」,並將其轉換爲0x55和EC到0xEC strtol做得很對,但它真的很慢需要6秒或5秒才能得到它,而我希望它真的很快 – Frought 2014-11-05 09:10:21

+2

@Frought:不,你錯了:你的問題中的輸入是「\ x55 \ xEC」,而不是「55 EC」。這些字符串完全不同,實際上是一個不同的問題。 'char ex [] {0x55,0xEC,0};'與'char ex [] =「\ x55 \ xEC」相同;' – stefaanv 2014-11-05 09:14:48

+1

關於strtol需要5到6秒鐘,你可以給我們提供一個工作示例顯示這一點。這將有助於發現問題。 – stefaanv 2014-11-05 09:17:34