A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>バイトオーダーを行っています。
htonlやntohlの64bit版はないのでしょうか?バイトオーダーを行っています。・・この意味が不明です。
バイトオーダーの変換を行っています。と理解します。
linux32bitで動いているC言語のアプリを、linux64bitに移行する場合、
無条件にバイトオーダーの変換を行うなら、htonlやntohlを使うべきではありません。
これは、実行時のマシンがsparc系(ビッグエンディアン)なら、一切データの変換は行われません。
実行時のマシンがINTEL系(リトルエンディアン)の場合に、エンディアン変換を行います。
そもそも、エンディアン変換を行うのは、ネットワーク通信でポート番号及びIPアドレスを変換する場合のみです。IPV6については、判りませんが、少なくともIPV4環境では、htnl,ntohlの64ビット版は必要ありません。(64ビットアプリでもhtnl,ntohlを使用すればIPアドレスの変換を正しく行えます)
無条件に64ビットデータ(8バイトデータ)のエンディアン変換をしたい為に、htnl,ntohlの64ビット版がほしいといわれているように見えますが、そうであれば、そもそも、32ビットアプリの時に
その機能を実装しているのではないでしょうか?
long型のデータを通信相手に送信する場合、32ビットアプリでは4バイトのデータを送りますが、
64ビットアプリでは8バイトのデータを送ることになりますが、これは、そもそもあってはならないことです。つまり、送信側の都合で(32ビットから64ビットアプリに変わったという理由で)、送るデータのサイズが変化してはいけない筈です。
つまり、32ビットアプリの時点で、4バイトのバイトオーダ変換をしている場合は、
64ビットでも4バイトのバイトオーダー変換をすべきです。
又、つまり、32ビットアプリの時点で、8バイトのバイトオーダ変換をしている場合は、
その時点で8バイトのバイトオーダー変換の機能を実装しているはずなので、新たにその機能を求める必要はないということです。
以上が、htnl,ntohlの64ビット版に対する回答ですが、無条件にバイトオーダーの変換を行う機能が
欲しいいうことであれば、linuxでは16ビット、32ビット、64ビットようにバイトオーダーのスワップマクロが提供されています。
bswap_16、bswap_32、bswap_64がありますのでそれが、使用可能です。
以下、使用サンプルです。
---------------------------------------
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <byteswap.h>
dump(char *name,int len,void *ptr)
{
int i;
unsigned char *p = (unsigned char*)ptr;
printf("%s=",name);
for(i=0;i < len; i++,p++){
printf("%02X",*p);
}
printf("\n");
}
int main(int argc , char *argv[])
{
//64ビット環境あることの確認
long long1;
short short1;
int int1;
long long int longlong1;
printf("sizeof long=%d\n",sizeof(long1));
printf("sizeof short=%d\n",sizeof(short1));
printf("sizeof int=%d\n",sizeof(int1));
printf("sizeof long long=%d\n",sizeof(longlong1));
long1 = 0x0123456789ABCDEFLL;
short1 = 0xABCD;
int1 = 0x1234ABCD;
longlong1 = 0x123456789ABCDEF0LL;
//スワップ前
dump("long1",8,&long1);
dump("short1",2,&short1);
dump("int1",4,&int1);
dump("longlong1",8,&longlong1);
long1 = bswap_64(long1);
short1 = bswap_16(short1);
int1 = bswap_32(int1);
longlong1 = bswap_64(longlong1);
//スワップ後
dump("long1",8,&long1);
dump("short1",2,&short1);
dump("int1",4,&int1);
dump("longlong1",8,&longlong1);
return 0;
}
------------------------------------------------
以下、実行結果です。
sizeof long=8
sizeof short=2
sizeof int=4
sizeof long long=8
long1=EFCDAB8967452301
short1=CDAB
int1=CDAB3412
longlong1=F0DEBC9A78563412
long1=0123456789ABCDEF
short1=ABCD
int1=1234ABCD
longlong1=123456789ABCDEF0
----------------------------------------------
CentOS release 6.3 (Final)
Kernel 2.6.32-279.el6.x86_64 on an x86_64
で実行しました。
gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
で、-m64 オプションでコンパイル&リンクした結果です。
No.3
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- TOEFL・TOEIC・英語検定 bitとlittleは両方ともに同じ 1 2022/08/10 13:03
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- その他(プログラミング・Web制作) Visual Studio Code 関数の使い方について 3 2023/05/31 13:15
- Excel(エクセル) Excel 2019 32-bit版を64-bit版にするには? 8 2023/07/28 14:20
- その他(Microsoft Office) 折れ線グラフ、同じ項目の色 4 2022/12/23 15:46
- 英語 英文和訳についての質問です。 2 2023/06/23 06:38
- その他(AV機器・カメラ) オーディオインターフェイスの24bitなど量子化bit数はどこで設定できるのでしょうか? 1 2022/06/26 07:58
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- オープンソース stable diffusionのインストールがうまくいきません。 1 2023/06/20 13:09
- 英語 わからない英文があります。 4 2022/11/16 07:25
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
ちょっと先の未来クイズ第6問
2025年1月2日と1月3日に行われる、第101回箱根駅伝(東京箱根間往復大学駅伝競走)で、上位3位に入賞するチームはどこでしょう?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
アプリを32bitから64bit移行
C言語・C++・C#
-
64bit対応
C言語・C++・C#
-
long型の定数の末尾にLを付ける意味
C言語・C++・C#
-
-
4
C++のfor文について
C言語・C++・C#
-
5
intとlongは同じ?
C言語・C++・C#
-
6
C言語 エラーの原因がわからないので,見てほしいです
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
byte[] を long,float とかに...
-
ダブルクォーテーションのrepla...
-
javascriptで文字列のsjis利用...
-
JavaのStringクラスに「外字」...
-
文字列の比較
-
javaで質問です。 文字列2023/2...
-
UTF-16LEにエンコード
-
C言語32bitから64bitの移行につ...
-
Windows-31Jからutf-8への変換...
-
replace関数で複数の文字の変換...
-
Path型をString型へ変換する(Java)
-
Arduino(C言語) String "1101" ...
-
Visual Basic でのコードをASCI...
-
int型のゼロ埋め
-
なぜか + が半角スペースに変換...
-
error C2440: 'static_cast' : ...
-
TEXTAREAからのデータを改行入...
-
UTF-8とUnicodeの互換性
-
CStringをLPCTSTRへ変換
-
COBOLで半角カナを全角カナに変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションのrepla...
-
javaで質問です。 文字列2023/2...
-
javascriptで文字列のsjis利用...
-
Path型をString型へ変換する(Java)
-
Visual Basic でのコードをASCI...
-
int型のゼロ埋め
-
エクセルVBAで「〜」が表現でき...
-
JavaのStringクラスに「外字」...
-
UTF-8とUnicodeの互換性
-
C言語32bitから64bitの移行につ...
-
文字列の比較
-
byte型のマイナスの扱いについて
-
Windows-31Jからutf-8への変換...
-
COBOLで半角カナを全角カナに変換
-
javaの初歩的な質問です。
-
カタカナをローマジに変換する。
-
魚眼画像から(パノラマのよう...
-
DBから取得したデータの文字化け
-
「C#」文字コードの取得&文字変換
-
[Javascript]エンターキー押下...
おすすめ情報