002
15.11.2002, 16:26 Uhr
void*
Generic Pointer (Operator)
|
Dieser kleine C++-Code sollte das machen, musst es halt auf C ändern:
C++: |
#include <string> #include <vector> #include <sstream> #include <iostream> #include <stdio.h>
void BuildHexString(const std::vector<std::string> &nibbles, std::string &s) { s="0x";
std::vector<std::string>::const_iterator i=nibbles.begin(), l=nibbles.end(); std::string h; while(i!=l) { h=*i; if("0000"==h) { s+="0"; } else { if("0001"==h) { s+="1"; } else { if("0010"==h) { s+="2"; } else { if("0011"==h) { s+="3"; } else { if("0100"==h) { s+="4"; } else { if("0101"==h) { s+="5"; } else { if("0110"==h) { s+="6"; } else { if("0111"==h) { s+="7"; } else { if("1000"==h) { s+="8"; } else { if("1001"==h) { s+="9"; } else { if("1010"==h) { s+="A"; } else { if("1011"==h) { s+="B"; } else { if("1100"==h) { s+="C"; } else { if("1101"==h) { s+="D"; } else { if("1110"==h) { s+="E"; } else { s+="F"; } } } } } } } } } } } } } } } ++i; } }
void SplitString(const std::string &s, std::vector<std::string> &nibbles) { std::string::size_type i=0, l=s.length();
for(; i<l; i+=4) { nibbles.push_back(s.substr(i, 4)); } }
void FillString(std::string &s) { std::string::size_type l=4-s.length()%4; std::string h;
for(std::string::size_type i=0; i<l; ++i) h+='0'; s=h+s; }
int CheckString(const std::string &s) { std::string::size_type j=0, l=s.length();
while(j<l) { if('0'!=s[j] && '1'!=s[j]) return(1); ++j; } return(0); }
int main(void) { std::string s;
std::cin >> s;
if(CheckString(s)) return(1);
if(s.length()%4) FillString(s);
std::vector<std::string> n; SplitString(s, n);
BuildHexString(n, s);
unsigned u; sscanf(s.c_str(), "%x", &u);
std::cout << u; return(0); }
|
-- Gruß void* Dieser Post wurde am 15.11.2002 um 16:28 Uhr von void* editiert. |