BigInteger値のための独自のクラスを作成しようとしています。このクラスでは大整数はunsigned int ints[capacity]
で構成され、私はコードがBigInteger
にstd::string
を変換するには、次のしている:私はunion { char[4] chars; int value; }
を使用してこの問題を解決しようとするstd :: stringをint []に格納するBig Integer for C++
void FromByteString1(const std::string& buf) {
int mask[] = {0, 8, 16, 24};
int validMask = 0xff;
size_t currentMask = 0, currentIndex = 0;
for (register size_t i = 0; i < buf.size(); ++i) {
int tmp = (int) buf[i];
data[currentIndex] |= ((tmp << mask[currentMask]) & (validMask << mask[currentMask]));
if (++currentMask == 4) {
currentMask = 0;
++currentIndex;
}
}
}
が、それは私に何も与えません。ここで
は私の出力である:誰もが同様の問題を抱えていたしました
#include <iostream>
#include <iomanip>
#include <bitset>
#define Write(message) std::cout << message
#define WriteLine(message) std::cout << message << std::endl
#define WriteEndl() std::cout << std::endl
#define WIDTH_STR 9
#define WIDTH_INT 33
void ShowStringChars(const std::string& str) {
for (size_t i = 0; i < str.length(); ++i)
Write(std::setw(WIDTH_STR) << str[i]);
WriteEndl();
}
void ShowStringCodes(const std::string& str) {
for (size_t i = 0; i < str.length(); ++i)
Write(std::setw(WIDTH_STR) << (int)str[i]);
WriteEndl();
}
void ShowStringCodesBin(const std::string& str) {
for (size_t i = 0; i < str.length(); ++i) {
std::bitset<8> bites((int)str[i]);
Write(std::setw(WIDTH_STR) << bites);
}
WriteEndl();
}
void ShowIntValues(int* arr, size_t length) {
for (size_t i = 0; i < length; ++i)
Write(std::setw(WIDTH_INT) << arr[i]);
WriteEndl();
}
void ShowIntValuesBin(int* arr, size_t length) {
for (size_t i = 0; i < length; ++i) {
std::bitset<32> bites(arr[i]);
Write(std::setw(WIDTH_INT) << bites);
}
WriteEndl();
}
const int capacity = 256;
int data[capacity];
void Clear() {
for (size_t i = 0; i < capacity; ++i)
data[i] = 0;
}
union its {
char chars[4];
int value;
} int_to_str;
void FromByteString1(const std::string& buf) {
int mask[] = {0, 8, 16, 24};
int validMask = 0xff;
size_t currentMask = 0, currentIndex = 0;
for (register size_t i = 0; i < buf.size(); ++i) {
int tmp = (int) buf[i];
data[currentIndex] |= ((tmp << mask[currentMask]) & (validMask << mask[currentMask]));
if (++currentMask == 4) {
currentMask = 0;
++currentIndex;
}
}
}
void FromByteString2(const std::string& buf) {
size_t index = 0;
for (size_t i = 0; i < buf.size(); i += 4, ++index) {
int_to_str.chars[0] = buf[i + 0];
int_to_str.chars[1] = buf[i + 1];
int_to_str.chars[2] = buf[i + 2];
int_to_str.chars[3] = buf[i + 3];
data[index] = int_to_str.value;
}
}
int main() {
Clear();
//std::string value = "this is some string";
std::string value = "this str";
ShowStringChars(value);
ShowStringCodes(value);
ShowStringCodesBin(value);
WriteEndl();
WriteEndl();
WriteEndl();
FromByteString1(value);
ShowIntValues(data, value.length()/4);
ShowIntValuesBin(data, value.length()/4);
return 0;
}
:
ここでは、この問題を解決するために作成されたテストプロジェクト「コンバータ」、の完全なコードがありますか?おかげで任意のヘルプ:)
なぜあなたはデバッガを使用していませんか?デバッグは、プログラムの作成方法を学習するプロセスの一部です。 – PaulMcKenzie
registerはC++の有効なキーワードではないことに注意してください。 –