0

誰かがここで何が起こっているのかを明確にしてもらえますか?

#define HEXVAL 0xA5

int main(int argc, char *argv[])
{
    int numBytes = 3;
    char *tmp;
    char *pyld;
    pyld = malloc(numBytes * sizeof(char));
    memset(pyld, 0, sizeof(pyld));
    tmp = pyld;

    *(tmp) = HEXVAL;
    printf("out = %x\n", pyld[0]); // -> ffffffa5
 }

すべての「out = ffffffa5」ではなく、「out = a5」を期待していました。符号付きの値を pyld に追加したいので、pyld を unsigned char に設定したくありません。

ありがとう!

4

1 に答える 1

0

まず、calloc を使用することをお勧めしますか? ヒープ領域をフォーマットします。

問題を解決するには、tmp を unsigned にする必要があります。pyld の署名を保持できます。tmp を参照して正しい値を出力することを忘れないでください。

これが私の仕事です:

#include <stdio.h>
#include <stdlib.h>

#define HEXVAL 0xA5

int main(int argc, char *argv[])
{
    int numBytes = 3;
    unsigned char *tmp;
    char *pyld;

    pyld = calloc(numBytes, sizeof(char));
    tmp = pyld;
    *tmp = HEXVAL;
    printf("pyld = %X\n", *pyld); 
    printf("tmp = %X\n", *tmp);

    return 0;
 }

ここに出力があります

pyld = FFFFFFA5
tmp = A5

それが役立つことを願っています!

于 2013-08-15T00:01:44.510 に答える