0

putchar関数を使って、などの関数を書きたいと思いwriteます。

#include <unistd.h>

ssize_t f(int fd, int c) {
    return write(fd, &c, 1);
}

しかし、ここにはエンディアンの問題があるのではないかと思います。だから私は使うべきsizeof (int)ですか?私は少し混乱しています、私は処理する方法がわかりません(キャストが必要unsigned charですか?)。

4

2 に答える 2

3

はい、ここには潜在的にエンディアンの問題があります。治療法は、cとしてではunsigned charなく、として渡すことintです。

ssize_t
f(int fd, unsigned char c)
{
    return write(fd, &c, 1);
}

<stdio.h>ルーチンは、主に歴史的な理由でsで動作しますint。それらは非常に古く、今日では正しくないと見なされる多くのインターフェイス設計の決定が含まれています。それらをテンプレートとして使用しないでください。

于 2012-08-27T16:42:48.180 に答える
1

はい、良いキャッチです。エンディアンの問題があります。関数のシグネチャを保持したい場合は、データを一時的にunsigned charに格納してから、出力する必要があります。

#include <unistd.h>

ssize_t f(int fd, int c) {
    unsigned char ch = (unsigned char)c;
    return write(fd, &ch, sizeof(unsigned char));
}
于 2012-08-27T16:45:18.573 に答える