2016-08-18 5 views
-3

HEXコードをDIN ZK-Codeに変換します。計算は以下の図のとおりです。 16進コードは2進コードに変換されます。その後、それはバイトごとに反転され、半バイトごとにDECに変換されます。 ここに問題があります。私がこれに対する解決策を講じたとしても、それは本当に非効率的です。たぶんあなたは私にヒントを与えることができ、見るべき機能があります。16進数をDINコードに変換する

enter image description here

+3

によって提案されたものの線に沿って何かをしますか?あなたは何が間違っている私たちを示すことができますか? –

+0

私は何もあなたを見ることができません。それはちょうど悪かったので。 – fatman44

+0

私はchar配列を読み込み、それをソートしようとしました。しかし、私もキャストエラーやものを取得します。私はちょうどその問題を持っていないと思っています。 – fatman44

答えて

1

ステップ1:あなたが"010C2E24DC"を含む文字列を持っているように、あなたは、std::stringにすべての文字を読むことができるコードで

をお読みください。これを複数のstd::stringに分割して、それぞれstd::stringのインターフェイスを使用してバイトを表す2文字の文字列にすることができます。

ステップ2:あなたは、コンソールから数値を読み取るためにstd::cinを使用することができますようにあなたは、数値に文字列を変換するためにstd::stringstreamを使用することができますバイト

に変換します。 std::hexoperator<<を使用して、毎回std::stringstreamを1つの "バイト文字列"で埋めて、operator>>を使用して符号なしの文字に解析します。

ステップ3:ビット

使用バイナリ演算子の組み合わせシフト(例えばシフト(< <を、>>)、及び(&)、または(|))各符号なしのビットの順序を逆にしますchar。

ステップ4:半バイトにビット反転符号なしの文字を変換するために、二項演算子の組み合わせを使用し、再び半バイト

に分離します。

ステップ5:あなたがテキストに変換し、それらに番号をストリーミングstd::stringstream(またはstd::coutに直接出力)を使用することができますバック文字列

に変換します。ゼロパディングを追加するには、std::setwを調べるとよいでしょう。

1

私はあなたがこれまでに試みられてきた何ピーター

#include <cassert> 
#include <cstring> 
#include <sstream> 
#include <iomanip> 
#include <iostream> 
#include <string> 
#include <bitset> 

std::string hex2din(const char* hex) { 
    assert(strlen(hex)==10); 

    std::stringstream oss; 
    std::stringstream ss; 

    std::string hexstr = std::string(hex); 

    int halfbyte; 

    for (size_t j = 0 ; j < 5 ; j++) { 
    std::string s = hexstr.substr(2*j,2); 
    ss << std::hex << "0x" << s; 
    unsigned short rev, tmp=0; 
    ss >> rev; 
    ss.clear(); 

    for(size_t i=0;i<8;i++) 
    { 
     tmp |= (((rev & (1<<i))?1:0) << (7-i)); 
    } 
    rev = tmp; 

    halfbyte = std::stoi(std::bitset<4>(rev >> 4).to_string(), nullptr, 2); 
    oss << std::setfill('0') << std::setw(2) << halfbyte; 

    halfbyte = std::stoi(std::bitset<4>(rev & 15).to_string(), nullptr, 2); 
    oss << std::setfill('0') << std::setw(2) << halfbyte; 
    } 
    return oss.str(); 
} 

int main(int argc, char* argv[]) { 
    std::string s = hex2din("010C2E24DC"); 
    std::cout << s << std::endl; 
    return 0; 
} 
+0

うわー、ありがとう。私は明日それを見るでしょう。たくさんのもの、私はこれから学ぶでしょう。ありがとう、ピーター! – fatman44

関連する問題