myByte - 所有字节都为零
a ="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ="
var memoryStream = new MemoryStream();
var binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, m_workspace.ListPlatforms.ToArray());
myByte = new byte[memoryStream.Length];
memoryStream.Seek(0, SeekOrigin.Begin);
memoryStream.Write(myByte, 0, myByte.Length);
string a = System.Convert.ToBase64String(myByte);
Run Code Online (Sandbox Code Playgroud)
可能是什么原因
搜索后,我没能找到一个很容易理解的解释,为什么额外的4个使用时对加BlockCopy方法(如图所示这里,这里,这里,这里)
该文件说:
顾名思义,BlockCopy方法整体复制一个字节块,而不是一次复制一个字节.因此,如果src和dst引用相同的数组,并且srcOffset + count -1的范围与dstOffset + count - 1的范围重叠,则重叠字节的值在复制到目标之前不会被覆盖.在以下示例中,名为arr的数组中的字节0-16的值将复制到字节12-28.尽管范围重叠,但源字节的值已成功复制.
但是我并没有真正明白这一点,并希望有人能够以不同的方式解释它(或发布一个解释这个的资源的链接),以及为什么需要添加这些额外的4个字节.
为清楚起见,这里是我所指的代码:
作为压缩方法的一部分:
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
Run Code Online (Sandbox Code Playgroud)
作为解压缩方法的一部分:
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
Run Code Online (Sandbox Code Playgroud) 我有一段文字,我想把它变成像这样的字节数组:
byte[,] input = new byte[4, 4] {
{ 0xd4, 0xe0, 0xb8, 0x1e },
{ 0xbf, 0xb4, 0x41, 0x27 },
{ 0x5d, 0x52, 0x11, 0x98 },
{ 0x30, 0xae, 0xf1, 0xe5 }
};
Run Code Online (Sandbox Code Playgroud)
我给出了这个例子,因为我有一个方法只能将参数作为字节数组(输入是一个有效的参数),我想确保我问的是正确的问题.
用一些其他字节序列(例如90)替换一个字节序列(例如67 67 67)的最有效方法是什么.序列可以具有不同的长度.
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] salt = new byte[16];
random.nextBytes(salt);
Run Code Online (Sandbox Code Playgroud)
我想将salt转换为字符串来存储/读取.我似乎无法让这个工作.我已经读过我需要使用正确的编码,但我不确定要使用哪种编码.我尝试了以下但是得到了垃圾:
String s = new String(salt, "UTF-8");
String s = new String(salt, "UTF-16");
String s = new String(salt);
Run Code Online (Sandbox Code Playgroud)
编辑:对于上下文,我正在尝试通过并理解此代码.我正在尝试查看salt和密码,以便我可以使用代码.
byte mac[] = ni.getHardwareAddress();
StringBuilder sb = new StringBuilder();
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
String macAdd = new String(sb);
System.out.println(macAdd);
Run Code Online (Sandbox Code Playgroud)
它打印出我的界面看起来像的MAC地址:
70-F1-A1-A1-DF-F5
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释一下这一步:
String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")
Run Code Online (Sandbox Code Playgroud)
特别是字符串%02X%s
是什么意思?
我觉得我在这个问题上退了两步,但有些事情让我感到困惑.我正在通过TCP/IP和byte []进行一些通信.
所以我开始构建我的byte []数组,第三个字节需要byte []的长度.如果我这样声明我的字节;
byte[] bytesToSend = new byte[119];
Run Code Online (Sandbox Code Playgroud)
然后用数据填充前三个字节..
bytesToSend[0] = 0x40;
bytesToSend[1] = 0x40;
bytesToSend[2] = Encoding.ASCII.GetBytes(bytesToSend.Length.ToString())[0];
Run Code Online (Sandbox Code Playgroud)
最后只打印出第三个字节,其中应包含长度;
MessageBox.Show(BitConverter.ToString(bytesToSend));
Run Code Online (Sandbox Code Playgroud)
我应该期望它返回119的字节大小,或者这只是最大大小?目前它正在返回十六进制"0x31",据我所知,它不等于119或3.毫无疑问,我缺少一些简单/基本的东西,但是有人能指出我正确的方向吗?
我想将字节附加到字节数组.结果应该是类型byte[]
,byte
在计算它们之后添加单个.所以我的问题是:实现这一目标的最佳和/或最有效的方法是什么?怎么写到那个?
也许已经问了问题,但我看多少我没找到或没有转换我的意愿.对不起,如果问题重复(请显示链接,如果是).
我在字节数组中得到一些信息,在调试时我看到它是十进制形式.如何在textblock或label中显示这个字节数组?
我不想要一些HEX格式,只是纯十进制字节数组:)
有问题请问.感谢帮助!