18

メソッドの宣言は次のとおりです。

//some.h
void TDES_Decryption(BYTE *Data, BYTE *Key, BYTE *InitalVector, int Length);

次のコードからこのメソッドを呼び出しています。

//some.c
extern "C" __declspec(dllexport) bool _cdecl OnDecryption(LPCTSTR stringKSN, LPCTSTR BDK){
    TDES_Decryption(m_Track1Buffer, m_cryptoKey, init_vector, len);
    return m_Track1Buffer;
}

のデータ型が でm_Track1Bufferある場合、上記のメソッドにいくつかの変更を加えたい、つまり の代わりにBYTE m_Track1Buffer[1000]; を返したい。これをどのように変換すればよいですかString in hexBytem_Track1bufferHex string

4

5 に答える 5

27

あなたがc ++について言及したように、ここに答えがあります。Iomanip は、int を 16 進形式で stringstream に格納するために使用されます。

#include <sstream>
#include <iomanip>

std::string hexStr(BYTE *data, int len)
{
     std::stringstream ss;
     ss << std::hex;

     for( int i(0) ; i < len; ++i )
         ss << std::setw(2) << std::setfill('0') << (int)data[i];

     return ss.str();
}
于 2012-12-27T07:34:07.943 に答える
12

このコードは、固定サイズ 100 のバイト配列を 16 進文字列に変換します。

BYTE array[100];
char hexstr[201];
int i;
for (i=0; i<ARRAY_SIZE(array); i++) {
    sprintf(hexstr+i*2, "%02x", array[i]);
}
hexstr[i*2] = 0;
于 2012-12-27T06:44:59.417 に答える
10

これは、プレーン配列とさまざまな標準コンテナーで使用できる、やや柔軟なバージョンです (大文字を使用しますか? バイト間にスペースを挿入しますか?)。

#include <string>
#include <sstream>
#include <iomanip>

template<typename TInputIter>
std::string make_hex_string(TInputIter first, TInputIter last, bool use_uppercase = true, bool insert_spaces = false)
{
    std::ostringstream ss;
    ss << std::hex << std::setfill('0');
    if (use_uppercase)
        ss << std::uppercase;
    while (first != last)
    {
        ss << std::setw(2) << static_cast<int>(*first++);
        if (insert_spaces && first != last)
            ss << " ";
    }
    return ss.str();
}

使用例 (プレーン配列):

uint8_t byte_array[] = { 0xDE, 0xAD, 0xC0, 0xDE, 0x00, 0xFF };
auto from_array = make_hex_string(std::begin(byte_array), std::end(byte_array), true, true);
assert(from_array == "DE AD C0 DE 00 FF");

使用例 ( std::vector):

// fill with values from the array above
std::vector<uint8_t> byte_vector(std::begin(byte_array), std::end(byte_array));
auto from_vector = make_hex_string(byte_vector.begin(), byte_vector.end(), false);
assert(from_vector == "deadc0de00ff");
于 2015-05-19T11:29:20.533 に答える