javascript - 使用 JavaScript 将 4 位字节数组转换为 int
问题描述
使用网络套接字,我将一个 4 位字节数组发送到我的 JS 库。这个字节数组代表一个数字,我想读回那个数字,但都是在 JavaScript 中。我发现很多相反的例子和将字节数组读入字符串的例子。
在我的 C# 代码中:
public static void SendImage(byte[] blobArray,
byte[] imageArray , string ts)
{
var blobSize = BitConverter.GetBytes(blobArray.Length);
var tsHdr = Encoding.ASCII.GetBytes(ts);
byte[] newPacket = new byte[imageArray.Length + tsHdr.Length + blobArray.Length+4];
Buffer.BlockCopy(tsHdr, 0, newPacket, 0, tsHdr.Length);
Buffer.BlockCopy(blobSize, 0, newPacket, 17, 4);
Buffer.BlockCopy(blobArray, 0, newPacket, tsHdr.Length+4, blobArray.Length);
Buffer.BlockCopy(imageArray, 0, newPacket, tsHdr.Length+4+ blobArray.Length, imageArray.Length);
}
这会传递一个时间戳(占用 17 位)。然后 4 位用于第一张图像的 len。然后是图像本身。然后是第二张图。
因此,从 JS 中读取所有内容:
ws.onmessage = function (e) {
try {
var ts = String.fromCharCode.apply(String, new Uint8Array(e.data, 0, 17));
var year = ts.substr(0, 4);
var month = ts.substr(4, 2);
var day = ts.substr(6, 2);
var hour = ts.substr(8, 2);
var min = ts.substr(10, 2);
var second = ts.substr(12, 2);
var mil = ts.substr(14, 3);
liveTimeStamp = hour + "-" + min + "-" + second + "-" + mil + " " + day + "/" + month + "/" + year;
var blobLen= e.data.slice(17, 4);
vat img1 = 'data:image/jpeg;base64,' + arrayBufferToBase64(e.data.slice(21, blobLen ));
var img2 = "data:image/jpeg;base64," + arrayBufferToBase64(e.data.slice(21 + blobLen, len - blobLen + 21));
};
解决方案
假设您的 C# 代码正在生成 little-endian 数据,您应该能够Uint32
从您Uint8Array
使用的DataView
类型中提取 a ,如下所示:
var data = new Uint8Array(e.data);
var dataView = new DataView(data.buffer);
var blobLen = dataView.getUint32(17, true); // false for big-endian
推荐阅读
- java - 由于某种原因,使用 ListBlockingQueue 线程的并发运行被阻塞
- javascript - 尝试定位声音文件但无法定位并运行代码会收到此错误(GET file:(file path here) net::ERR_FILE_NOT_FOUND)
- r - 向量中带有 NA 的 R 最大值
- android - 从片段中的自定义 ArrayAdapter 中单击 ListView 中的“删除”按钮,从数据库中删除相应的项目
- reactjs - Typescript Redux 工具包 axios dispatch logout action
- x509 - CHOICE 本身与隐式标签一起使用时的 CHOICE 类型的编码(使用具体示例:CRLDistPoints)
- primeng - primeng p-virtualScroller 空列表项和滚动条问题
- python - 无法在简单命令中分配给比较
- c - 如何修复C中的分段错误错误
- excel - 当我加入多张工作表时,我得到“运行时错误 -2147467259(80004005)表达式中的类型不匹配”