怎么将八个字节的LONGLONG 的变量给一个字符流

czbever 2009-03-20 02:28:09
我是这样,大家有什么更好的办法吗?

vector<char>pBufferWrite
BOOL CMyConnection::WriteLong(LONGLONG value)//写8个字节的数据
{
char *myInt = new char[8];

myInt[0] = (char)((value >> 56) & 0xFF);
myInt[1] = (char)((value >> 48) & 0xFF);
myInt[2] = (char)((value >> 40) & 0xFF);
myInt[3] = (char)((value >> 32) & 0xFF);
myInt[4] = (char)((value >> 24) & 0xFF);
myInt[5] = (char)((value >> 16) & 0xFF);
myInt[6] = (char)((value >> 8) & 0xFF);
myInt[7] = (char)((value >> 0) & 0xFF);

for(int i=0;i<8;i++ )
{
m_pBufferWrite.push_back(myInt[i]);
}
if(myInt)
{
delete []myInt;
}
return TRUE;
}
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
czbever 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 czbever 的回复:]
CopyMemory(&myInt[0],&value,8);这是把一个LONGLONG 的变量赋给myInt数组,反过来要怎么弄?
[/Quote]

我这个在ARm上也是不行的 郁闷
czbever 2009-03-23
  • 打赏
  • 举报
回复
CopyMemory(&myInt[0],&value,8);这是把一个LONGLONG 的变量赋给myInt数组,反过来要怎么弄?
czbever 2009-03-21
  • 打赏
  • 举报
回复
long long l=0xffffff00;
vector<BYTE> vec;
vec.resize(8);
memcpy(&vec[0],&l,8);
for(int i=0;i<8;i++)
{
BYTE a;
a=vec[i];

}

在ARM上得到的vec数组的值是这样的:{0,255,255,255,0,0,0,0}而实际结果应该是{0,0,255,255,255,255,255,255} 是不是在ARM上没对齐?在ARM上要怎么才能实现这样的操作呢
  • 打赏
  • 举报
回复
用itoa转换保存不好吗?
downmooner 2009-03-20
  • 打赏
  • 举报
回复

long long l=12345678;
vector<char> vec;
vec.resize(8);
memcpy(&vec[0],&l,8);
ltc_mouse 2009-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tangshuiling 的回复:]
union CMyConnection
{
long long value;
char buffer[8];
};

CMyConnection test;
test.value = 一个具体值;
for(int i=0;i <8;i++ )
{
m_pBufferWrite.push_back(myInt[i]);
}
楼主自己看看效果,如果不能不行,楼主自行调整
[/Quote]
union想法不错~ 缺点是与系统的字节序绑定了,呵呵
beyond071 2009-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tangshuiling 的回复:]
union CMyConnection
{
long long value;
char buffer[8];
};

CMyConnection test;
test.value = 一个具体值;
for(int i=0;i <8;i++ )
{
m_pBufferWrite.push_back(myInt[i]);
}
楼主自己看看效果,如果不能不行,楼主自行调整
[/Quote]

使用联合的思路挺好
czbever 2009-03-20
  • 打赏
  • 举报
回复
晕 我是要放到vector<char>m_pBufferWrite这里啊
tangshuiling 2009-03-20
  • 打赏
  • 举报
回复
union CMyConnection
{
long long value;
char buffer[8];
};

CMyConnection test;
test.value = 一个具体值;
for(int i=0;i <8;i++ )
{
m_pBufferWrite.push_back(myInt[i]);
}
楼主自己看看效果,如果不能不行,楼主自行调整
Qlaiaqu 2009-03-20
  • 打赏
  • 举报
回复

#include <sstream>
using namespace std;
int main(void)
{
char a[9];
stringstream s;
long b = 1234567;//改一下类型就行了
s<<b;
s>>a;
cout<<a;
return 0;
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧