unsigned long
をソケット経由で送信する必要があります。 unsigned long
が4バイトであるため、受信側は4バイトしか期待していません。私が書いた変換関数は以下のようなものですが、charに格納しなければならない数値が127以下でなければなりません。 0x7F。 0x7fより大きい値の場合、拡張ASCIIテーブル(http://www.asciitable.com/)に従った文字がcharに格納されると予想しますが、それは間違いありません。 0x90の場合、何も格納されません。私はUnicode文字セットでVS12を使用しています。C++で符号なしlongをchar *に変換する最も良い方法は
どのような変換方法が正しいですか?
void number2char(unsigned long number, char* nrAsByte){
std::stringstream numberSS;
numberSS << std::hex << number;
int length = numberSS.str().length();
length = length/2.0 + 0.5;
nrAsByte = new char[sizeof(number)]();
std::fill(nrAsByte, nrAsByte + length, '\x20');
while (length > 0){
int lastTwo = (number & 0xff);
number >>= 8;
unsigned char a = lastTwo; // this doesn't work if lastTwo > 0x7F
std::memcpy(nrAsByte + length - 1, &a, 1);
--length;
}
}
私はコードのために申し訳ありませんが、それはよく私がテストされていなかった、それはバグを含んだ、ITを使用しないでください、代わりに答えをアドバイスに従ってください
なぜ4バイトを直接送信しないのですか? – Mine
どうしたらうまくいかないのですか? – immibis
投稿した機能がメモリをリークします。メモリは 'nrAsByte'に割り当てられますが、呼び出し元がメモリへのポインタを取得する仕組みはありません。基本的には変換をしようとしているようですが、結果は呼び出し元に転送されません... – skyking