二进制交换位置,并输出的问题.

restartboy 2005-03-13 10:31:18
请教大家一个问题.
我从一个文件依次读出一个8字节的流.
怎么实现将他的二进制数据的位置改变.
比如我读出0x123456789abcdef
怎样将他的二进制数的第1位放到第58位,第2位放到第50位……第64位放到第7位,再以二进制输出。
谢谢。
...全文
204 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenery 2005-03-19
  • 打赏
  • 举报
回复
呵呵,你还没有结贴吧?还没有收到你的分哦。
wanzhigang 2005-03-18
  • 打赏
  • 举报
回复
int sur=0x123;
string s=Convert.ToString(sur,2);//转换成二进制字符串
byte [] bs=Encoding.Default.GetBytes(s);//放入byte数组
Array.Reverse(bs);//反转byte数组元素
s=Encoding.Default.GetString(bs);//反转后的结果放入字符串
int tar=Convert.ToInt32(s,2);//转换为数值
MessageBox.Show(s+" "+tar.ToString());
restartboy 2005-03-17
  • 打赏
  • 举报
回复
greenery你的分加上去了吗。怎么我给了分这里还是显示0分阿。
greenery 2005-03-14
  • 打赏
  • 举报
回复
好,再写
byte x = 0xD4;
byte y = 0;

y = checkAndLink((x & 0x01) , 0x04) // 第1位放到第3位
| checkAndLink((x & 0x02) , 0x80) // 第2位放到第8位
| checkAndLink((x & 0x04) , 0x02) //第3位放到第2位
.....

byte checkAndLink(byte p_byOld, byte p_byOffset)
{
if (p_byOld > 0)
return p_byOffset;
else
return 0;
}
restartboy 2005-03-13
  • 打赏
  • 举报
回复
to:greenery
你这样好像不行吧.
你是从右边开始算的第一位吧.
如果这样的话,我的例子11010100 变换后应该是01011010

按照你的方法,比如((x & 0x04) & 0x02) 先是把第3位取出来,变成00000100,但是00000100和0x02与是得00000000啊,而不是00000010。

再帮忙想象吧。还是谢过:)
greenery 2005-03-13
  • 打赏
  • 举报
回复
byte x = 0xD4;
byte y = 0;

y = ((x & 0x01) & 0x04) // 第1位放到第3位
| ((x & 0x02) & 0x80) // 第2位放到第8位
| ((x & 0x04) & 0x02) //第3位放到第2位
.....
大概是这样,你看看可否?
restartboy 2005-03-13
  • 打赏
  • 举报
回复
比如二进制11010100
第1位放到第3位,第2位放到第8位,第3位放到第2位,第4位放到第6位,第5位放到第7位,第6位放到第1位,第7位放到第4位,第8位放到第5位.
就变成 10100101
xxuu503 2005-03-13
  • 打赏
  • 举报
回复
有逻辑关系么?没有逻辑关系的话,你就按最啰嗦的方法写
somedummy 2005-03-13
  • 打赏
  • 举报
回复
这个……

描述得很不清楚,无法推导你想要干什么……
xiongchen 2005-03-13
  • 打赏
  • 举报
回复
UP
restartboy 2005-03-13
  • 打赏
  • 举报
回复
我1个字节这样做是对的。
但8个字节就不行了。
我用的long类型
跟踪
类似1<<40这样位数移得比较多的是错的。
有什么解决方法吗?

restartboy 2005-03-13
  • 打赏
  • 举报
回复
谢谢greenery的启发

int[] IP = {3,8,2,6,7,1,4,5};
int x = 0xD4;
int y =0;
for(int i=0;i<=7;i++)
{
if(i<=IP[i])
{
y = y|((x&(1<<7-i))>>(IP[i]-i-1));
}
else
y = y|((x&(1<<7-i))<<(i-IP[i]+1));

}
Console.WriteLine("{0:X}",y);

(ps 我是从左边算的第一位)
另外我想问问在执行移位操作时,计算机是一位一位的加0,还是一下算出0的个数再一起加。我上边的算法都有点时延,这还是1个字节,如果变成8个字节,会不会慢很多。
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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