- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
关于从字节数组中读取单词,我有些困惑。背景是我正在使用 C 语言编写的 MIPS 模拟器,用于介绍计算机体系结构类(class),但是在调试我的代码时,我遇到了一个令人惊讶的结果,从 C 编程的角度来看,我根本无法理解。
我有一个名为 mem 的字节数组,定义如下:
uint8_t *mem;
//...
mem = calloc(MEM_SIZE, sizeof(uint8_t)); // MEM_SIZE is pre defined as 1024x1024
在我的一些测试中,我手动将一个 uint32_t 值存储到一个名为 mipsaddr 的地址的四个内存块中,一次一个字节,如下所示:
for(int i = 3; i >=0; i--) {
*(mem+mipsaddr+i) = value;
value = value >> 8;
// in my test, value = 0x1084
}
最后,我测试了尝试以两种方式之一从数组中读取单词。在第一种方式中,我基本上是尝试一次将整个单词读入一个变量:
uint32_t foo = *(uint32_t*)(mem+mipsaddr);
printf("foo = 0x%08x\n", foo);
在第二种方式中,我手动从每个单元格中读取每个字节,然后将它们与移位相加:
uint8_t test0 = mem[mipsaddr];
uint8_t test1 = mem[mipsaddr+1];
uint8_t test2 = mem[mipsaddr+2];
uint8_t test3 = mem[mipsaddr+3];
uint32_t test4 = (mem[mipsaddr]<<24) + (mem[mipsaddr+1]<<16) +
(mem[mipsaddr+2]<<8) + mem[mipsaddr+3];
printf("test4= 0x%08x\n", test4);
上面代码的输出是这样的:foo=0x84100000test4= 0x00001084
test4 的值与我预期的完全一样,但是 foo 似乎颠倒了字节的顺序。为什么会这样?对于 foo,我希望 uint32_t* 指针指向 mem[mipsaddr],并且由于它是 32 位长,它只会按照它们在数组中存在的顺序读取所有 32 位(即 00001084) .显然,我的理解是不正确的。
我是新来的,我确实搜索了这个问题的答案,但找不到。如果已经发布了,我深表歉意!但如果没有,我希望有人能在这里开导我。
最佳答案
它(除其他外)在这里解释:http://en.wikipedia.org/wiki/Endianness
当将大于一个字节的数据存储到内存中时,它取决于字节存储顺序的体系结构(即 CPU)。或者,首先存储最高有效字节,最后存储最低有效字节,反之亦然。当您通过字节访问操作读回各个字节,然后将它们合并以再次形成原始值时,您需要考虑特定系统的字节顺序。
在您的 for 循环中,您正在逐字节存储您的值,从最高有效字节开始(倒数索引有点误导 ;-)。之后你的内存看起来像这样:0x00 0x00 0x10 0x84。
然后您将使用单个 32 位(四字节)访问读回该字。根据我们的架构,这将变为 0x00001084
(大端)或 0x84100000
(小端)。既然你得到了后者,你就在一个小端系统上工作。
在第二种方法中,您使用的顺序与存储各个字节的顺序相同(首先是最重要的字节),因此您会得到与之前存储的值相同的值。
关于C编程: words from byte array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12740336/
我想标记一个字符串,例如 Best Beat Makers,以几乎类似于 NGram 的方式为每个单词生成标记,例如: IN: "Best Beat Makers" OUT: ["Best", "B
这个问题在这里已经有了答案: Is there a way to word-wrap long words in a div? (6 个答案) 关闭 7 年前。
我想编写一个 Python 代码来检查字符串是否包含类似于以下内容的内容: 'word.Word' => 将其替换为 'word.\nWord'。 smallLetter.capitalLetter
我想编写一个 Python 代码来检查字符串是否包含类似于以下内容的内容: 'word.Word' => 将其替换为 'word.\nWord'。 smallLetter.capitalLetter
我有以下正则表达式: ^--([\w|-]+) 我想匹配 --word --no-word 但不是: ---word ----word 最佳答案 将表情更改为 ^--(\w[-\w]*) 这需要在两个
在我的加载项中,我需要为每个打开的文档创建一个任务 Pane 。在加载项的启动方法中,我订阅了 ApplicationEvents4_Event.NewDocument 和 Application.D
我使用 word javascript api 开发了一个 word 插件。我的文档 .docx 文件在服务器上,我需要在加载项中单击按钮打开该 .docx 文档作为新的 Word 文档。 请指导我如
我需要在某个地方修复一些 CSS,因为我的文本没有环绕,如果它是一个非常长的单词,它会无限期地继续下去。 在大多数情况下,我在我的 CSS 文件中尝试了 word-wrap: break-word;
这个问题在这里已经有了答案: What is the difference between "word-break: break-all" versus "word-wrap: break-word
这个问题在这里已经有了答案: What is the differect between word-wrap and overflow-wrap? [duplicate] (1 个回答) Is t
问题详细描述如下: 给定两个单词(beginWord 和 endWord)和字典的单词列表,找出是否存在从 beginWord 到 endWord 的转换序列,这样: 一次只能更改一个字母 每个转换后
我以前没有使用过邮件合并字段,我发现的所有内容都要求您在能够插入合并字段之前选择一个数据源。我想要做的就是将字段放在 word 文档上,并且在代码使用它之前不要将其合并。我基本上是在创建文档模板。这在
将此代码放置在ThisDocument_Startup之外的Word文档级VSTO解决方案中的某个位置(创建带单击事件的功能区按钮): int zero = 0; int divideByZero =
有没有办法在没有加载项的情况下启动 MS Word(仅此实例)?我只能找到一种方法来完全禁用加载项。 最佳答案 来自Word command line switches documentation ,
有没有办法在没有加载项的情况下启动 MS Word(仅此实例)?我只找到一种方法来完全禁用加载项。 最佳答案 来自Word command line switches documentation ,您
当使用 URI 方案从网页上托管的 word 模板打开新文档时不起作用。 https://msdn.microsoft.com/en-us/library/office/dn906146.aspx 这
我的问题: overflow-wrap: break-word 和 word-break: break-word 有区别吗? 非重复: 这里有一些现有的问题,乍一看可能是重复的,但实际上不是。 Wha
我希望使用 WordNet 从一组基本术语中寻找相似术语的集合。 例如,单词'discouraged' - 潜在的同义词可能是:daunted, glum, deterred, pessimistic
部署 Word Add in 时,发布没有错误。复制文件后出现以下错误。 我没有太多事情要做。这是堆栈跟踪。 ************** Exception Text **************
我需要一个 Java 正则表达式来匹配除某个单词之外的任何单词,同时包含另一个单词。 例如字符串中不能包含Apple,但必须有Peach。 Apple and Peach - Not match Pe
我是一名优秀的程序员,十分优秀!