标签:pretty tps unity too comm print 顺序 mon nbsp
A、C#大端模式和小端模式。
小端(little-endian)模式:低地址上存放低字节,高地址上存放高字节。
如0x11223344→ byte[] numBytes = new byte[]{ 0x44,0x33,0x22,0x11};
numBytes[0] = 0x44; //低地址存放低字节
numBytes[3] = 0x11; //高地址存放高字节
反之,高字节在前,低字节在后,则为大端模式。
反转示例:
short num = 12;
byte[] bytes = BitConverter.GetBytes(s);
Array.Reverse(bytes); //bytes转换为倒序(反转),可实现大端小端的转换
B、大端模式和小端模式。原文地址:https://blog.csdn.net/qqliyunpeng/article/details/68484497
作者: 李云鹏(qqliyunpeng@sina.cn)
版本号: 20170330
更新时间: <2017-04-06>
原创时间: <2017-03-30>
版权: 本文采用以下协议进行授权,自由转载 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及出处.
不同的系统在存储数据时是分大端(bit-endian)小端(little-endian)存储的,比如,Inter x86、ARM核采用的是小端模式,Power PC、MIPS UNIX和HP-PA UNIX采用大端模式
小端模式用文字描述是,低地址上存放低字节,高地址上存放高字节。
假如有一个32位的数据 0x11223344,则在小端模式上的机器上存储为如下的形式:
【1】0x11223344这个数中 0x11 是高字节(MSB),0x44是地字节(LSB)
【2】讨论大小端的时候最小单位是字节
【3】内存的画法中采用的是向上增长的
【3】可以将数据比作方向盘,顺时钟旋转得到的在内存中的布局是小端存储
至于大端模式用文字描述是,低地址上存放高字节,高地址上存放低字节。
判断的方法有很多种,下面将简单的列举几种:
第一种方法:
【1】如果是大端,*p的结果是0
第二种方法:
函数中打印方法:
1. 在通信的场合经常会遇到大端和小端的转换的问题,比如tcp/ip 中,tcp/ip 中规定了自己传输的时候采用大端模式,当然相应的它也提供了很多函数来做支持。
如果主机是小端的模式,在跟网络进行交互的时候经常要用到如下的函数
当一个系统要发送的数据是 0x12345678,以大端模式发送,则会先发送0x12.
2. 如何在64位ubuntu下同下编译32位的程序?
需要先安装32位的库:sudo apt-get install libc6-dev-i386
然后在编译的时候加上-m32选项。
C、C#实现反转总结。原文地址:https://blog.csdn.net/chenfujun818/article/details/78654956
下面是C#版 反转数组的几种总结。
解决其他同行的转换字符串而来。觉得很实用就整理了一下。
字符串版地址:http://m.blog.csdn.net/superit401/article/details/51318880
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//unity 必须引用 system.text 命名空间
using System.Text;
public class ArrayReverseTest : MonoBehaviour {
private List<int> _arrList = new List<int>{12,58,36,46,78,463,588,999};
void Start () {
PrintList();
Debug.Log(" ================ before ==============");
// _arrList = ArrayReverse();
// _arrList = BufferReverse();
// _arrList = StackReverse();
// _arrList = XORReverse();
RecursiveReverse(_arrList,0,_arrList.Count -1);
PrintList();
Debug.Log(" ================ after ==============");
}
//方法一 使用.net 自带的Array.Reverse() 面试时不建议用
List<int> ArrayReverse()
{
_arrList.Reverse();
return _arrList;
}
// 方法二 使用缓存数组方式 取1/2 进行交换
List<int> BufferReverse()
{
int countList = _arrList.Count;
for(int i = 0;i < countList / 2 ;i++)
{
int temp = _arrList[i];
_arrList[i] = _arrList[countList - i - 1];
_arrList[countList - i - 1] = temp;
}
return _arrList;
}
//方法三 使用栈
List<int> StackReverse()
{
List<int> tempList = new List<int>();
tempList.Clear();
Stack stack = new Stack();
foreach(int value in _arrList)
{
stack.Push(value);//入栈
}
for(int i = 0;i < _arrList.Count;i++)
{
tempList.Add((int)stack.Pop());//出栈
}
return tempList;
}
//方法四 使用异或运算进行反转
List<int> XORReverse()
{
int countList = _arrList.Count - 1;
for(int i = 0;i < countList;i++,countList--)
{
_arrList[i] ^= _arrList[countList];
_arrList[countList] ^= _arrList[i];
_arrList[i] ^= _arrList[countList];
}
return _arrList;
}
//方法五 使用递归 进行反转
void RecursiveReverse(List<int> list,int left,int right)
{
if(left >= right)
return;
//转换方式一
// int temp = list[left];
// list[left] = list[right];
// list[right] = temp;
//转换方式二
list[left] ^= list[right];
list[right] ^= list[left];
list[left] ^= list[right];
RecursiveReverse(list,++left,--right);
}
void PrintList()
{
//使用stringBuilder 的好处不言自明了 反转字符串的时候 它也是一种方式
StringBuilder strBuilder = new StringBuilder();
for(int i = 0,Max = System.Math.Min(_arrList.Count,_arrList.Count);i< _arrList.Count;i++)
{
strBuilder.Append(_arrList[i]);
strBuilder.Append(" ");
}
Debug.Log(" _arrlist = " + strBuilder);
}
}
字符串反转的9种方法
1. 使用Array.Reverse方法
标签:pretty tps unity too comm print 顺序 mon nbsp
原文地址:https://www.cnblogs.com/cheng2015/p/8975653.html