1

こんにちは、ビット (ビット リテラル) を含む (malloc() で割り当てられた) メモリのチャンクがあります。それを char の配列として読み取りたい、または 8 の ASCII 値を出力したいです。メモリの連続ビット。

メモリをchar *として割り当てましたが、ループで各ビットを評価し、値をcharに追加してcharの値を左にシフトするよりも良い方法で文字を取り出すことができませんでしたが、より迅速な解決策を探していました。ありがとうございました

私が今書いたのはこれです:

割り当て用:

char * bits = (char*) malloc(1);

me への書き込み用:

ifstream cleartext;
cleartext.open(sometext);
while(cleartext.good())
{
     c = cleartext.get();
     for(int j = 0; j < 8; j++)
     {  //set(index) and reset(index) set or reset the bit at bits[i]
        (c & 0x80) ? (set(index)):(reset(index));//(*ptr++ = '1'):(*ptr++='0');
         c = c << 1;
     }..
}..

そして今まで私は文字を取り戻すことができませんでした.私はビットを印刷するだけです:

printf("%s\n" bits);

私がやろうとしていることの例は次のとおりです。

input.txt には文字列「AAAB」が含まれています

私のプログラムは、「AAAB」を「01000001010000010100000101000010」としてメモリに書き込む必要があります(ビットで65656566であるAAABのビットでのASCII値です)

では、メモリの内容をファイルに書き換える機能があればいいのですが。

したがって、メモリに再び「01000001010000010100000101000010」が含まれている場合、出力ファイル「AAAB」に書き込まれます。

4

9 に答える 9

1
int numBytes = 512;
char *pChar = (char *)malloc(numBytes);
for( int i = 0; i < numBytes; i++ ){
   pChar[i] = '8';
}

これは C++ であるため、「new」も使用できます。

int numBytes = 512;
char *pChar = new char[numBytes];
for( int i = 0; i < numBytes; i++ ){
   pChar[i] = '8';
}
于 2009-03-17T18:12:39.783 に答える
0

このようなもの?

char *buffer = (char*)malloc(42);
// ... put something into the buffer ...
printf("%c\n", buffer[0]);

しかし、C ++を使用しているので、なぜmallocそんなことを気にするのだろうか...

于 2009-03-17T18:03:33.843 に答える
0
char* ptr = pAddressOfMemoryToRead;

while(ptr < pAddressOfMemoryToRead + blockLength)
{
     char tmp = *ptr;
     // temp now has the char from this spot in memory
     ptr++;
}
于 2009-03-17T18:06:42.200 に答える
0

これはあなたが達成しようとしていることですか?

char* p = (char*)malloc(10 * sizeof(char));
char* p1 = p;
memcpy(p,"abcdefghij", 10);

for(int i = 0; i < 10; ++i)
{
    char c = *p1;
    cout<<c<<" ";
    ++p1;
}
cout<<"\n";
free(p);
于 2009-03-17T18:06:56.613 に答える
0

おそらくコードを含めて、より詳細に説明できますか?私があなたの質問を完全に誤解しない限り、あなたが言っていることは意味がありません。あなたはこのようなことをしていますか?

char * chunk = (char *)malloc(256);

もしそうならchunk、配列として扱うことで、任意の文字に相当するデータにアクセスできます。5chunk[5]番目の要素などを提供します。もちろん、これらは文字になります。これはあなたが望むものかもしれませんが、あなたの質問からは完全にはわかりません。 ...たとえば、chunk[5]が65の場合、のようcout << chunk[5];に印刷すると、文字「A」が表示されます。

ただし、実際の数値65を印刷する方法を尋ねている場合があります。その場合は、を実行しますcout << int(chunk[5]);。toにキャストするintと、文字ではなく整数値として出力されます。あなたがあなたの質問を明確にすれば、私か他の誰かがあなたをさらに助けることができます。

于 2009-03-17T18:08:49.760 に答える
0

任意の構造体のメモリ バイトを char* 配列にコピーする方法を尋ねていますか? もしそうなら、これでうまくいくはずです

SomeType t = GetSomeType();
char* ptr = malloc(sizeof(SomeType));
if ( !ptr ) {
  // Handle no memory.  Probably should just crash
}
memcpy(ptr,&t,sizeof(SomeType));
于 2009-03-17T18:11:59.127 に答える