文字列をメモリに保存し、その文字列にアクセスして小文字を大文字に、またはその逆に変更しようとしています。私が理解していないのは、文字列のアドレスとそのアドレスのASCII値を参照する方法です。データとアドレスの操作に問題があるだけで、ロジックを理解できると思います。2つを区別するにはどうすればよいですか?注:これは宿題のコーディング課題です。
1992 次
2 に答える
0
ヒント。xor value,0x20
ケースを切り替えるには、「32」ビットを反転します。
Z80アセンブラでは、次のようになります。
SRC: DB 'Press A Key To Continue', 0; Our source string
DST: DB 'Press A Key To Continue', 0; Where we will put our string. make sure its big enough so we don't over write our program.
;load MSG+0 to working regist
;flip the 32 bit
;move the working register to DST + 0
;load MSG+1 and repeat
于 2011-01-23T08:12:19.077 に答える
0
文字列へのアクセスは、フラッシュにあるかRAMにあるかによって異なります(文字列は起動時にRAMにコピーされる可能性があると思いますが、私は肯定的ではありません)。ただし、これが宿題の問題であることを考えると、RAM内の文字列に直接アクセスできる可能性があります。@EnabrenTaneが指摘しているように、charバイトのビット5を反転して大文字と小文字を変更できます(ASCIIバイトコードの詳細については、優れたWikipedia ASCIIページを参照してください)。したがって、Cでこれを行う必要がある場合:
char the_string[6] = "foobar" // assuming string is created like this
int l = 6 * sizeof(char); // the length of the string
for(int i=0; i<l; i++) {
char* c = the_string + i; // grab char[i] of the string
*char = *char ^ 0x20; // flip the case
}
(私はこれをコンパイルしようとはしなかったので、エラーがあるかもしれません)
上記のように作成された文字列の場合、に格納されている値the_string
は実際には最初の文字のアドレスへのポインタです。その文字列内の特定の文字を見つけるには、アドレスに追加するだけです。文字列を操作するには、char*
ポインタを逆参照し、この例では値を同じ場所に格納して、元の値を上書きする必要があります。
于 2011-01-24T18:04:54.537 に答える